I.概要:それは実行時例外である場合、異常のキャプチャ、キャプチャは他のコードには影響しませんとは思わないが、トランザクション内で実行され、トランザクション管理に参加した、データベースの挿入は、アップデートは他の操作のようにバックをロールバックされます。
1、次のコードは、トライキャッチキャッチで例外が(データ長すぎる行1の列「project_id_」の)、UPDATE文の外に与えられずに、(内部例外をキャプチャするために)ログを印刷し、まだないということが、我々は成功するでしょう。トランザクションの説明はロールバックされます。
@Transactional
public void testIsRoback() {
try {
this.executeSql();
// 可以正常执行的sql,测试在executeSql()方法抛运行时异常后还能入库吗
jdbcTemplate.update("INSERT INTO t_finance_zndb_log (id_,project_id_) value ('1','2')");
} catch (Exception e) {
System.out.println("+++++++++++++++++++捕获到外部异常了+++++++++++++++++++++++");
e.printStackTrace();
}
}
private void executeSql() {
try {
// 模拟运行时异常
jdbcTemplate.execute("INSERT INTO t_finance_zndb_log (id_,project_id_) value ('1','222')");
} catch (Exception e) {
System.out.println("------------------捕获到内部异常了-----------------------");
e.printStackTrace();
}
}
非実行中の時間ならば2、異常な状況は同じではありません。あなたが見ることができますが、内部例外がキャッチさが、insert文はロールバックされていない、まだデータベースに保存されました。