preparedStatement.executeUpdate()
返回更新的行数。到目前为止,就我的研究而言,不可能进行更新查询来检索更新的行,但这似乎是一个基本功能,我显然遗漏了一些东西。如何做到这一点?
根据对问题的第一条评论,这在 MySQL 中根本不可能。PostgreSQL 支持UPDATE...RETURNING
这个特性。
如果您使用 executeQuery 而不是 executeUpdate,您会得到一个结果集。
然后,将存储过程更改为函数,并在函数末尾的选择中返回更改后的行。AFAIK,您不能从 MySQL 中的过程返回数据(与 Microsoft SQL 服务器相反)。
编辑:上面删除的建议是不可能的。JDBC 规范不允许在查询语句中更新(请参阅这个答案:http ://bugs.mysql.com/bug.php?id=692 )。
但是,如果您知道要更新的行的 WHERE 子句,则始终可以先选择它们,以获取主键,执行更新,然后再对它们执行选择。然后你得到改变的行。
当您触发preparedStatement.executeUpdate() 时,您已经有了行标识符,您可以使用它来唯一地标识要更新的行——您需要使用相同的标识符来进行查询并获取更新的行。您无法使用 JDBC api 一次性完成更新和检索。