JDBC--手動開啟Connection事務


        三層架構中的業務邏輯層是處理業務邏輯的部分,很多時候需要調用多步Dao層的增刪改操作,這就涉及到使用事務保證數據的一致性。

       Connection接口自帶的事務機制需要保證多步SQL操作使用相同的連接對象,這樣才能保證事務的執行環境。

       事務的邊界一般是在業務邏輯層的(即事務的開啟、提交、回滾都是在業務邏輯層),因為業務邏輯層會涉及多步操作,所以Connection對象要在業務邏輯層創建,然后將Connection對象傳給Dao層的方法即可。

       為了確保事務的正確性,異常要統一在業務邏輯層處理


下面展示使用Connection啟動事務的具體代碼

 

	/**
	 * 開始事務
	 * @param cnn
	 */
	public static void beginTransaction(Connection cnn){
		if(cnn!=null){
			try {
				if(cnn.getAutoCommit()){
					cnn.setAutoCommit(false);
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 提交事務
	 * @param cnn
	 */
	public static void commitTransaction(Connection cnn){
		if(cnn!=null){
			try {
				if(!cnn.getAutoCommit()){
					cnn.commit();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 回滾事務
	 * @param cnn
	 */
	public static void rollBackTransaction(Connection cnn){
		if(cnn!=null){
			try {
				if(!cnn.getAutoCommit()){
					cnn.rollback();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}


       這三個方法一般會放在一個公共類DbUtil中,方法都是靜態的,可通過類名.方法直接調用。只需將連接作為參數傳給這些方法即可,以下為使用上述方法創建事務環境的代碼框架。

 

 

public void funcExample(){
	Connection cnn=DbUtil.getConnection();
	try{
		//開啟事務
		DbUtil.beginTransaction(cnn);
	
		//調用Dao層多個增刪改方法
		//..........
		
		//提交事務
		DbUtil.commitTransaction(cnn);
	}catch(Exception e){
		e.printStackTrace();
		//回滾事務
		DbUtil.rollBackTransaction(cnn);
	}finally{
		//還原連接狀態
		DbUtil.resetConnection(cnn);
		DbUtil.close(pstm);
		DbUtil.close(cnn);
	}
	
}


剛接觸JDBC不久,小結一下。

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM