トランザクションを使用せずにこのエラーが発生した場合
ユーザーがステートメントのキャンセルを要求しました。ステートメントは、指示されたとおりに実行しています。問題は、誰がこの声明のキャンセルを要求したのかということです。
SQLを実行する準備をするコードのすべての行を確認します。次のように、状況によってはステートメントをキャンセルするステートメントに適用するメソッドを使用できます。
statement = conn.createStatement();
conn.setAutoCommit(true);
statement.setQueryTimeout(25);
my_insert_statement.setString(1, "moobars");
my_insert_statement.executeUpdate();
statement.close();
私の場合、クエリのタイムアウトを25秒に設定し、挿入にそれよりも時間がかかったときに何が起こったのでしょうか。'ユーザー要求によるキャンセルステートメント'例外を渡しました。
トランザクションの使用中にこのエラーが発生した場合:
この例外が発生した場合は、SQLトランザクションを実行するすべてのコードを再確認してください。
トランザクション内にあるクエリがあり、コミットするのを忘れた場合、その接続を使用して、トランザクション内にないかのように操作する他のことを行うと、この例外を生成する未定義の動作が発生する可能性があります。
トランザクションを実行するすべてのコードがそれ自体の後でクリーンアップされていることを確認してください。トランザクションが開始され、作業が完了し、さらに作業が行われ、トランザクションがロールバックまたはコミットされていることを確認してから、接続がautocommit=true
状態のままであることを確認してください。
これが問題である場合、自分でクリーンアップするのを忘れた場所で例外がスローされることはありません。トランザクション後にクリーンアップに失敗した後のどこかで発生するため、追跡するのが難しい例外になります。接続を更新する(接続を閉じて新しい接続を取得する)と、接続がクリアされます。