如何在执行过程中清除取消重SQL的执行?

时间:2012-10-22 14:36:44

标签: java sql multithreading jdbc

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

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

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

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

那么如何取消执行查询快速清洁

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。我会使用连接池,让我的app-server管理它,虽然DataSource认为这是最常用的方法。

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

如果你仍然希望快速和脏的尝试使用(不建议除此之外是不推荐使用的方法)threadQuery.Stop();

答案 1 :(得分:0)

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

相关问题