Java 如何正确取消ResultSet查询
我有一个长时间运行的查询,可能需要10分钟。为了允许用户取消这个查询,我需要找到一种方法来中断结果集 我有: 为了测试它是否可取消,我创建了另一个线程Java 如何正确取消ResultSet查询,java,resultset,Java,Resultset,我有一个长时间运行的查询,可能需要10分钟。为了允许用户取消这个查询,我需要找到一种方法来中断结果集 我有: 为了测试它是否可取消,我创建了另一个线程 Runnable run = new Runnable() { @Override public void run() { try { Thread.sleep(10000); Syste
Runnable run = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
System.out.println("Closing...");
rs.close();
} catch (InterruptedException ex) {
Logger.getLogger(DstDao.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DstDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
run.run();
当该线程关闭它时,我得到一个异常:
Exception Encountered: java.sql.SQLRecoverableException: Closed Resultset: getMetaData
它确实可以工作,但我不愿意对正常程序流的一部分使用异常
我怀疑这是否是停止长时间运行的查询的正确方法,或者是否有某种方法可以取消它,我不知道。这样做对吗?有更好的方法吗?
谢谢 使用
语句取消语句。取消()
。如果您已经有了ResultSet
,您就没有问题,但是元数据查询不会花费十分钟,因此您已经有了ResultSet
就不能通过长时间运行的查询来评估当前正在评估的ResultSet
,所以关闭ResultSet
不会影响长时间运行的查询;到rs.getStatement().cancel();查询在10秒后继续。因此不支持取消,但请再次注意,rs
不是长时间运行的查询,而是之前已经完成的元数据查询。如果是这种情况,关闭它不会有什么不同吗?当我关闭它时,我可以看到查询不再在服务器上运行,并且在本地停止。
Exception Encountered: java.sql.SQLRecoverableException: Closed Resultset: getMetaData