有两个执行线程,一个是通过JDBC连接并执行大量查询的线程,如下所示:
Statement stmtData = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rsData = stmtData.executeQuery("SELECT * from hugeTable");
,第二个是启动第一个提到的线程的那个,当然如果用户请求就取消它,假设在DBMS执行查询的过程中可能需要很长时间。
我尝试在第二个线程中调用第一个线程的interrupt()方法,希望它会在第一个线程中抛出InterruptedException,但它没有。
那么如何取消执行查询快速清洁?
答案 0 :(得分:0)
有几种方法可以做到这一点。我会使用连接池,让我的app-server管理它,虽然DataSource认为这是最常用的方法。
如果您仍想对其进行硬编码,可以使用apache BasicDataSource和。 setMaxWait();
如果你仍然希望快速和脏的尝试使用(不建议除此之外是不推荐使用的方法)threadQuery.Stop();
答案 1 :(得分:0)
如果你的jdbc驱动程序支持取消,那么你可以使用java.sql.Statement.cancel()方法。该线程需要捕获InterruptedException,然后对正在执行的语句调用cancel()。