Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 来自JDBC事务的返回值_Postgresql_Jdbc_Transactions - Fatal编程技术网

Postgresql 来自JDBC事务的返回值

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 &

是否可以从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();

您可以使用
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
}