2011-01-04 12 views
3

残念ながら、jdbcの仕様は、Statement.cancel()の保証については何も言及していません。Statement.cancel()とスレッドセーフティの保証

javadocで示されているのは、Statement.cancel()thread-safeであることだけです。
しかし:

  • はそれがcancel()が常に動作することを保証しますか?
    (現時点でStatementを実行しているスレッドがすぐにブロックを解除して処理を続行するように)
  • cancel()はブロックされず、すぐに復帰することは保証されていますか?同じjavadocツールから
+0

oracle jdbcドライバの場合、特にネットワークまたはサーバー側の問題の場合は、このような保証はありません。http://download.oracle.com/docs/cd/E11882_01/java.112/e16548/apxtblsh .htm#BACDAICJ – MRalwasser

答えて

3

cancel()は常に機能することは保証されていますか?

いいえ、少なくとも私の経験はありません。私は、私も単純にUnsupportedOperationException

それはそれはブロックされません)(キャンセル保証されて投げたドライバーに対処しなければならなかったと思うし、(多かれ少なかれ)すぐ

番号を返します実行中のステートメントに応じて、cancel()はクエリの最初の行が返されるまで待機することがあります。これもまたドライバに大きく依存します。

+0

プロセスを厳密に終了させるためにキャンセルプロセスのタイムアウトを設定することはできますか?私は 'Statement.cancel(int timeout)'メソッドについて考えましたが、私は見つけませんでした;) – bobbel

2

DBMSおよびドライバの両方のサポートが保証を制限し、SQL文

を中止する場合。もう1つの制限は、具体的なドライバによってStatement.cancel()が実装されていることです。つまり、実装はJava REの一部ではありません。

したがって、実際にはをキャンセルする必要があります。はスレッドセーフですが、実際のドライバ/ DBMSのベンダーに問い合わせる必要があります。

関連する問題