PostgreSQL 和 JDBC:是否支持“UPDATE table ... RETURNING ... INTO”?

Kaj*_*nus 0 java sql postgresql jdbc

我有一个表,其中包含[主键计数器],用于[另一个表中的每页评论]。
\n这些主键是每页的:对于每个页面,评论 ID 从 1 开始。

\n\n

我想自动分配 10 个 ID 来写入 10 条新评论。
\n \xe2\x80\x94 我可以使用 PostgreSQL 和 JDBC 执行此操作吗?

\n\n

(您有任何示例/相关 JDBC 文档的链接吗?)

\n\n

我只找到了有关如何使用returning新插入行的主键的示例,其中使用了一些getGeneratedKeys在我的情况下似乎没有用的示例。

\n\n

                                                      ***

\n\n

我认为 SQL UPDATE 语句看起来像这样:

\n\n
update PAGES\nset NEXT_COMMENT_ID = NEXT_COMMENT_ID + 10\nwhere PAGE_ID = ?                    <-- next-comment-id is *per page*\nreturning NEXT_COMMENT_ID into ?\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,不同的线程和服务器不会尝试重用/覆盖相同的 ID(对吗?)。

\n

小智 5

无需在对象上使用execute()和方法即可支持此功能:getResult()Statement

像这样的东西(禁止任何错误处理):

String sql = "update ... returning ...";
boolean hasResult = statement.execute(sql);
int affectedRows = 0;
ResultSet rs = null;
if (hasResult) {
  rs = statement.getResultSet();
}
int affectedRows = statement.getUpdateCount();
Run Code Online (Sandbox Code Playgroud)

正如您知道该语句的作用,这应该没问题。处理“未知”SQL 语句有点复杂,因为您需要在循环中调用getMoreResults()and 。getUpdateCount()有关详细信息,请参阅 Javadoc。