複数のステートメントをアトミックに実行する場合は、トランザクションを使用する必要があります。 JDBC接続のデフォルトは「自動コミット」モードです。これは、各ステートメントが独自のトランザクションで実行されることを意味します。したがって、最初に、 Connection.setAutoCommit(false)
。
自動コミットモードを無効にすると、実行されたステートメントが現在のトランザクションで実行されます。現在のトランザクションがない場合は、トランザクションが開始されます。このトランザクションは、 Connection.commit()
または、Connection.rollback()
。
次のようなことをする必要があります:
try (Connection connection = DriverManager.getConnection(...)) {
connection.setAutoCommit(false);
try (Statement stmt = connection.createStatement()) {
stmt.executeUpdate(<your first update>);
stmt.executeUpdate(<your second update>);
connection.commit();
} catch (SQLException e) {
connection.rollback();
throw e;
}
}
詳細については、JDBCチュートリアルの章トランザクションの使用 を参照してください。 。
そして、プリペアドステートメントについて学んでください。値をクエリ文字列に連結すると、値をエスケープするのを忘れた場合にSQLインジェクションや奇妙なエラーが発生する可能性があるため、正しくありません。 JDBCチュートリアルの章