我们有大量长时间运行的SQL查询,并希望能够取消执行。到目前为止,我使用ExecutorCompletionService
来运行查询,这对于取消尚未运行的查询非常有用。
我的问题是:我想硬取消当前正在运行的查询。方法java.sql.Statement.cancel()似乎不适用于HSQLDB
。从java doc:"如果DBMS和驱动程序都支持中止SQL语句,则取消此Statement对象。"我想HSQLDB不支持取消。
有没有人知道如何取消声明(可能是丑陋的,但仍然可以接受的方式)?
答案 0 :(得分:2)
有关可行的解决方案,请参阅https://sourceforge.net/p/hsqldb/bugs/1436/。
简短的变体:
使用HSQLDB的最新SVN版本或服务器的2.3.4 Final。
如果要取消的当前查询使用hsqldb连接,请创建一个具有同一服务器管理员权限的新连接。
使用
select * from information_schema.system_sessions
使用您要查找的语句查找会话。
使用
ALTER SESSION <SESSIONNUMBER> RELEASE
取消声明。
关闭连接。
答案 1 :(得分:0)
对我来说,工作的 sql 命令是 ALTER SESSION <SESSIONNUMBER> END STATEMENT