0

2 つの実行スレッドがあり、1 つは JDBC 経由で接続し、次のような負荷の高いクエリを実行するスレッドです。

Statement stmtData = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rsData = stmtData.executeQuery("SELECT * from hugeTable");

2 つ目は、最初に述べたスレッドを開始し、ユーザーが要求した場合はもちろんキャンセルします。たとえば、長い時間がかかる可能性がある DBMS によるクエリの実行中にしましょう。

最初のスレッドで InterruptedException がスローされることを期待して、2 番目のスレッドで最初のスレッドの interrupt() メソッドを呼び出してみましたが、そうではありませんでした。

では、クエリの実行をすばやくクリーンにキャンセルするにはどうすればよいでしょうか。

4

2 に答える 2

0

jdbc ドライバーがキャンセルをサポートしている場合は、java.sql.Statement.cancel() メソッドを使用できます。スレッドは InterruptedException をキャッチし、実行中のステートメントで cancel() を呼び出す必要があります。

于 2012-10-22T17:42:57.610 に答える
0

これを行う方法はいくつかあります。私は接続プールを使用し、アプリサーバーにそれを管理させますが、DataSource y はこれが最も一般的な方法だと思います。

それでもハードコーディングしたい場合は、Apache BasicDataSource と . setMaxWait();

それでも手早くやりたい場合は、使用してみてください(非推奨のメソッドであること以外はお勧めしません)threadQuery.Stop();

于 2012-10-22T15:05:07.087 に答える