Postgresql 来自JDBC事务的返回值
是否可以从JDBC事务返回值?例如,假设我需要知道在应用以下事务后,与“key”对应的值是1还是-1。在键上执行后续的Postgresql 来自JDBC事务的返回值,postgresql,jdbc,transactions,Postgresql,Jdbc,Transactions,是否可以从JDBC事务返回值?例如,假设我需要知道在应用以下事务后,与“key”对应的值是1还是-1。在键上执行后续的SELECT会引入竞争条件,因为另一个并发进程可能会在第一个事务完成后但在执行后续的SELECT之前执行同一事务。交易是否可以将该值返回给我 con.setAutoCommit(false) val stmt = con.createStatement() stmt.executeUpdate("UPDATE table SET value = CASE WHEN value &
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();
您可以使用
RETURNING
子句来进行此操作。但是为了能够从中处理值,您必须使用execute()
而不是executeUpdate()
您可以使用
RETURNING
子句来进行此操作。但是为了能够从中处理值,您必须使用execute()
而不是executeUpdate()
或者一次性
ResultSet result=statement.executeUpdate(“查询”)
,注意我们也可以使用executeUpdate
和插入更新和删除
阅读更多@YCF\u L:对于返回结果的查询,您不能使用executeUpdate()“执行给定的SQL语句,(…),该语句不返回任何内容”。当您对返回结果的查询使用executeUpdate()
时,Postgres驱动程序将失败,并显示“结果是在不期望任何结果时返回的”。我的意思是int result=statement.executeUpdate(“查询”)代码>因此,如果结果很好,那么0表示执行了一个或多个语句,否则,如果结果为0,则表示没有更新、插入或删除任何记录,因此我认为没有必要使用ResultSet@YCF_L:结果集用于在更新后获取列的新值,而无需运行另一个SELECT语句。它不是用来检查某个东西是否被更新的,也不是一次性的ResultSet result=statement.executeUpdate(“查询”)
,注意我们也可以使用executeUpdate
和插入更新和删除
阅读更多@YCF\u L:对于返回结果的查询,您不能使用executeUpdate()“执行给定的SQL语句,(…),该语句不返回任何内容”。当您对返回结果的查询使用executeUpdate()
时,Postgres驱动程序将失败,并显示“结果是在不期望任何结果时返回的”。我的意思是int result=statement.executeUpdate(“查询”)代码>因此,如果结果很好,那么0表示执行了一个或多个语句,否则,如果结果为0,则表示没有更新、插入或删除任何记录,因此我认为没有必要使用ResultSet@YCF_L:结果集用于在更新后获取列的新值,而无需运行另一个SELECT语句。它根本不用于检查是否有更新。
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
}