Java “怎么做?”;取消查询";在SQL开发人员中工作
在SQL Developer中,单击“取消任务”按钮立即停止查询的执行。我必须在我们的项目中实现相同的功能 我使用BC4J作为ORM工具来执行查询。我必须取消一个名为thorugh view objects的搜索查询执行,它调用多个数据库函数/过程来获得结果 我尝试过使用Java “怎么做?”;取消查询";在SQL开发人员中工作,java,performance,oracle,oracle11g,oracle-sqldeveloper,Java,Performance,Oracle,Oracle11g,Oracle Sqldeveloper,在SQL Developer中,单击“取消任务”按钮立即停止查询的执行。我必须在我们的项目中实现相同的功能 我使用BC4J作为ORM工具来执行查询。我必须取消一个名为thorugh view objects的搜索查询执行,它调用多个数据库函数/过程来获得结果 我尝试过使用viewObject.cancelQuery()但没有任何效果;查询一直执行到最后 我通过JDBC连接池连接,由BC4J处理。我的建议是 提交查询时 阻止任何UI命令接受“取消”(最简单的方法:为此使用模式对话框,更方便用
viewObject.cancelQuery()代码>但没有任何效果;查询一直执行到最后
我通过JDBC连接池连接,由BC4J处理。我的建议是
- 提交查询时
- 阻止任何UI命令接受“取消”(最简单的方法:为此使用模式对话框,更方便用户:仅阻止本地视图命令)
- 在与UI线程不同的单独线程中启动查询,使用
Runnable
实现
- 有自己的
cancel()
方法
- 分别调用
cancelQuery
resp<代码>取消查询
.interrupt()
将此事件发送到您的查询runnable;为此,您需要在
中存储对查询线程的引用。活动IO操作有时会被此信号中断李>
run()
中的InterruptedException
和SQLException
:如果捕获了这些异常,则回滚事务(如果为只读查询启动了一个异常)Thread.currentThread().isInterrupted()
,如果结果为真,则检查cancel()
- 调用查询的
cancel()
- 忘记线程(但如果有太多被取消的线程尚未完成,请确保不要耗尽系统资源或连接池)
- 解除对UI的阻止
Swing和EclipseRCP中都有支持这种设计的助手类。@bmorris591不是致命的。是查询的取消。会议没有结束。为什么每个人都认为我们有心灵感应?请解释发生了什么,而不是说“它不起作用”。你收到错误信息了吗?它最终会死吗?或者查询运行到完成?它可能是通过
javax.sql.Statement.cancel()
@APC:Well“不工作”意味着调用cancelQuery()不产生任何影响,查询执行将继续进行。是的,我是通过bc4jIn future提供的JDBC连接池连接的。请编辑您的问题,为我们提供更多信息,而不是使用评论。这个想法是为了改进你的帖子。长串的评论实际上使你的问题不那么可读。