2012-03-28 10 views
1

これはJDBCを使用したSQLの更新文に関するものです。実際には私が持っていたいくつかの問題を調べていますが、特定の行を更新しようとしているときにupdate文がゼロを返した時点ですべてがハングしてしまいます。oracle Jdbc update文return zero

特定の行の更新ステートメントは、テーブル内に存在するかどうかを確認しようとしています。したがって、レコードが見つからない可能性がなく、更新がゼロになる可能性はありません。

私の質問は、あなたが見ているか、更新によってゼロが返される可能性のある他の可能性です。私はoracle jdbcドライバを使用しています。したがって、oracle jdbcには、レコードが見つからない以外の更新文によってゼロが戻される場合があります。

多くのおかげで、 アミールMawia

+6

"レコードが見つからない可能性はありません" - これは一般的に*ちょうど前のことです。 "ああ、*レコードが見つからない理由は..."コードを表示してください。 –

+0

私はサーバーの下でコードを共有しないように制限していますが、かなり平凡で、接続を取得し、準備された文を作成して実行すると言えます。私が尊重しなければならないこの制約に感謝したいと思います。 – mawia

+0

実際には、行が見つかったかどうかを確認していないからです。たとえば、 'UPDATE'を' SELECT'に変更して新しい値を削除した場合(それ以外の場合はクエリに触れないでください)、それから動作していますか?私の経験では、それはクエリと同じくらい一般的なタイプミスである可能性があります。 –

答えて

0

のexecuteUpdate

int型のexecuteUpdate() が

は、SQLのデータ操作言語である必要があります。このPreparedStatementオブジェクトのSQL文を実行するSQLExceptionをスローします(DML) INSERT、UPDATE、DELETEなどのステートメント。 DDLステートメントなど、何も戻さないSQLステートメントが含まれています。

戻り値: は、(1)何も を返さないSQLデータ操作言語(DML)文またはSQL文の(2)0の行数は例外のいずれか: SQLException - データベースアクセスエラーが発生した場合、このメソッドがクローズされたPreparedStatementで呼び出さまたはSQL文がちょうどドキュメントが指定されていることを言って、ResultSetオブジェクト

を返します:

「のexecuteUpdateの戻り値が0であるとき、それは二つのうちの一つを意味することに注意してください事:

実行されたステートメントは、ゼロ行に影響を与える更新ステートメントでした。 実行されたステートメントはDDLステートメントでした。

0

申し訳ありませんが、私は、Oracleから

はまだありませんコメントを投稿する方法を知っている、そう...しません:

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

注意のexecuteUpdateの戻り値が0であるときということは、それが

* The statement executed was an update statement that affected zero rows. 
* The statement executed was a DDL statement. 

このように、期待していない方法で更新ステートメントが混乱しているようです。例外がスローされなかったと考えて、これが当てはまると思います。これが反復可能な場合は、サーバー側で送信されたSQLを監視し、欠落しているものを確認することができます。