トランザクションを途中で中止する方法はありますか?たとえば、5分後に実行されるコマンドをデータベースに送信し、4分後にそれを中止したいとします。
JDBCは、「この接続で実行していることをすべて停止する」信号をDBに送信する方法を定義していますか?
james が述べたように、Statement.cancel()は実行中の Statement (select、update など) の実行をキャンセルします。JDBC のドキュメントでは、Statement.cancel() は別のスレッドから実行しても安全であると明確に述べられており、タイムアウト スレッドでの呼び出しの使用も提案されています。
ステートメントをキャンセルした後も、トランザクションをロールバックする作業が残っています。別のスレッドから実行しても安全であるとは文書化されていません。Connection.rollback()は、他のすべての JDBC 呼び出しを実行するメイン スレッドで発生する必要があります。キャンセルされた Statement.execute...() 呼び出しが JDBCException で完了した後に処理できます (キャンセルによる)。
私はあなたがしたいことは、長時間実行されるクエリ/トランザクションでアプリケーションがブロックされるのを防ぐことだと思います。この目的のために、JDBCはクエリタイムアウトの概念をサポートしています。これを使用してクエリタイムアウトを設定できます。
java.sql.Statement.setQueryTimeout(seconds)
そして、トランザクションをロールバックすることSQLException
により、メソッドによってスローされたものを処理しexecute()
ます(もちろん、autocommitがfalseに設定されていて、JDBCドライバーがStatement.cancel()をサポートしている場合にのみ機能します)。
Statement.cancel() を確認してください。
いいえ、標準のJDBCを使用して中止することはできません。
特定のRDBMSがそれをサポートするための拡張機能を定義しているかどうかを確認しようとするかもしれません。