是否可以从JDBC事务中返回值?例如,假设我需要知道对应于' key'的值。在应用以下事务后,立即为1或-1 。在密钥上执行后续SELECT
会引入竞争条件,因为另一个并发进程可能在第一次完成之后但在执行后续SELECT
之前执行相同的事务。交易是否有可能将价值返还给我?
con.setAutoCommit(false)
val stmt = con.createStatement()
stmt.executeUpdate("UPDATE table SET value = CASE WHEN value > 0 THEN -1 ELSE 1 END WHERE key = 'key'");
con.commit();
答案 0 :(得分:2)
您可以使用RETURNING
子句。但是为了能够处理该值,您必须使用execute()
而不是executeUpdate()
con.setAutoCommit(false)
Statement stmt = con.createStatement()
stmt.execute("UPDATE table SET value = CASE WHEN value > 0 THEN -1 ELSE 1 END WHERE key = 'key' RETURNING value");
ResultSet rs = stmt.getResultSet();
if (rs.next()) {
int key = rs.getInt(1);
... do something with that
}