0
preparedStatement.executeUpdate()

更新された行数を返します。これまでの私の調査では、更新された行を取得する更新クエリを実行することはできませんが、これは明らかに何かが欠けている基本的な機能のようです。これを達成する方法は?

4

3 に答える 3

3

質問に対する最初のコメントによると、これは MySQL では単に不可能です。PostgreSQL はUPDATE...RETURNINGこの機能としてサポートしています。

于 2012-12-07T19:02:37.360 に答える
2

executeUpdate の代わりに executeQuery を使用すると、結果セットが返されます。

次に、ストアド プロシージャを関数に変更し、変更された行を関数の最後の選択で返します。私の知る限り、MySQLのプロシージャからデータを返すことはできません(たとえば、Microsoft SQLサーバーとは対照的です)。

編集:上記の提案は不可能です。JDBC 仕様では、クエリ ステートメントでの更新は許可されていません (これに対する回答を参照してください: http://bugs.mysql.com/bug.php?id=692 )。

ただし、更新しようとしている行の WHERE 句がわかっている場合は、いつでも最初にそれらを選択して、主キーを取得し、更新を実行してから、後で選択を実行できます。次に、変更された行を取得します。

于 2012-08-07T16:26:41.613 に答える
-1

prepareStatement.executeUpdate() を起動すると、更新する行を一意に識別することができる行識別子が既にあります。同じ識別子を使用してクエリを実行し、更新された行をフェッチする必要があります。JDBC api を使用して更新と取得を一発で行うことはできません。

于 2012-08-07T17:31:28.077 に答える