Java 如何正确取消ResultSet查询

Java 如何正确取消ResultSet查询,java,resultset,Java,Resultset,我有一个长时间运行的查询,可能需要10分钟。为了允许用户取消这个查询,我需要找到一种方法来中断结果集 我有: 为了测试它是否可取消,我创建了另一个线程 Runnable run = new Runnable() { @Override public void run() { try { Thread.sleep(10000); Syste

我有一个长时间运行的查询,可能需要10分钟。为了允许用户取消这个查询,我需要找到一种方法来中断结果集 我有:

为了测试它是否可取消,我创建了另一个线程

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