我這裡預設就是innodb,所以不是這個異常
剛開始我的**是:
connection connection = datasource.getconnection();
connection.setautocommit(false);
preparedstatement preparedstatement = connection.preparestatement(sql);
string sql = "***x";
// 異常之前提交
connection.commit();
preparedstatement.close();
connection.close();
// 我在這裡模擬後續的操作,假設這裡有乙個異常
int a = 5/0; // 這裡理論上會報異常
system.out.println(a);
可以看到上述**connection.commit()在異常發生之前提交了,並且關閉了連線,所以下面的異常就無法回滾
修改上述**:
connection connection = datasource.getconnection();
connection.setautocommit(false);
preparedstatement preparedstatement = connection.preparestatement(sql);
string sql = "***x";
// 我在這裡模擬後續的操作,假設這裡有乙個異常
int a = 5/0; // 這裡理論上會報異常
system.out.println(a);
// 最後再提交,否則無法回滾
connection.commit();
preparedstatement.close();
connection.close();
總結: 事務的提交和管理都應放到**段的最後面,防止無法提交
JDBC 批處理 無法回滾
預編譯 批處理模式更新資料 suppresswarnings deprecation private boolean batchexecuteinserttest if recordnum commit size 0 catch exception e catch exception e2 fina...
spring事務回滾失效的問題
今天碰到乙個鬱悶的問題。spring配置的事務回滾無效。而且奇怪的是 中總共操作了3張表的資料,但是其中2張表在發生異常時回滾了,另一張表死活不回滾。開始還以為是事務巢狀導致的,但是搜尋一番發現spring預設的事務傳播機制是支援巢狀事務,並且發生異常會全部回滾了 這就奇了怪了,試了好幾遍仍然是其中...
truncate方法導致事務回滾失效
前景提要 配置多資料來源,配置事務,刪除資料並重新新增資料,新增出現問題後無法回滾。檢查結果 刪除使用的truncate方法,該方法在plsql中執行無需submit。無論是oracle資料庫,還是mysql資料庫,刪除使用truncate放,都無法利用事務回滾。知識點 1.刪除表中的資料的方法有d...