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