jdbc Connection.setAtuoCommit注意事項

jdbc,Connection,autoCommit

工作上在使用JDBC對資料庫提交時,發生table lock的問題,造成程式無法繼續進行,

最後發現在某一段程式碼在使用setAutoCommit(false)後,卻無使用commit或rollback所造成

try {
	con.setAutoCommit(false);
	if (...) {
		if (...) {
            ...
			con.commit();
		}
	} else {
		// doNothing
	}
} catch (SQLException e) {
	...
	DbUtil.doRollback(con);
}

查詢網路上的說明:

  • When auto-commit is disabled, the user must call either the commit or rollback method explicitly to end a transaction.
           Connection con = null;
           try{
               con = getConnection();
               con.setAutoCommit(false);
               /*
                * do what you want here.
                */
               con.commit();
            }catch(Throwable e){
               if(con!=null){
                   try {
                       con.rollback();
                   } catch (SQLException e1) {
                       e1.printStackTrace();
                   }
               }
            throw new RuntimeException(e);
    
            }finally{
               if(con!=null){
                   try {
                       con.close();
                   } catch (SQLException e) {
                       e.printStackTrace();
                   }
               }
           }
    

 

 

 

Reference