jdbcに関するいくつかの同時実行の問題についてアドバイスが必要です。基本的には、値を更新してから、更新を使用してその値を取得し、次に選択する必要があります。自動コミットをオフにすることで、他のトランザクションがこのテーブルにアクセスできないため、他のトランザクションこれがコミットされるまで、更新および選択クエリを実行することはできません。
以下はサンプルコードです。これはうまくいくと思いますか?これを実装するためのより良い解決策は他にありますか?
int newVal=-1;
con.setAutoCommit(false);
PreparedStatement statement = con.prepareStatement("UPDATE atable SET val=val+1 WHERE id=?");
statement.setInt(1, id);
int result = statement.executeUpdate();
if (result != 1) {
throw new SQLException("Nothing updated");
} else {
statement = con.prepareStatement("SELECT val FROM atable WHERE id=?");
statement.setInt(1, id);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
newVal = resultSet.getInt("val");
}
}
statement.close();
con.commit();
con.setAutoCommit(true);
ありがとう。