0

有两个执行线程,一个是通过 JDBC 连接并执行繁重查询的线程,如下所示:

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

第二个是启动第一个提到的线程并且如果用户请求当然取消它,假设在 DBMS 执行查询的过程中可能需要很长时间。

我尝试在第二个线程中调用第一个线程的 interrupt() 方法,希望它会在第一个线程中抛出 InterruptedException,但它没有。

那么如何快速干净地取消查询的执行呢?

4

2 回答 2

0

有几种方法可以做到这一点。我会使用连接池并让我的应用程序服务器来管理它,尽管 DataSource y 认为这是最常见的方法。

如果您仍想对其进行硬编码,您可以使用 apache BasicDataSource 和 . setMaxWait();

如果您仍然想快速而肮脏地尝试使用(不推荐,除了不推荐使用的方法)threadQuery.Stop();

于 2012-10-22T15:05:07.087 回答
0

如果您的 jdbc 驱动程序支持取消,那么您可以使用 java.sql.Statement.cancel() 方法。线程需要捕获 InterruptedException,然后在正在执行的语句上调用 cancel()。

于 2012-10-22T17:42:57.610 回答