如何在SQL Developer中“取消查询”工作

时间:2013-02-19 12:06:47

标签: java performance oracle oracle11g oracle-sqldeveloper

在SQL Developer中,单击“取消任务”按钮会立即停止执行查询。我必须在我们的项目中实现相同的功能。

cancel query iamge

我使用BC4J作为ORM工具来执行查询。我必须取消一个名为thorugh view的搜索查询执行,它调用几个数据库函数/过程来获得结果。

我尝试使用viewObject.cancelQuery();,但它没有任何效果;查询继续执行到最后。

我通过JDBC连接池连接,由BC4J处理。

1 个答案:

答案 0 :(得分:2)

我的建议是

  • 提交查询时
    • 阻止任何UI命令接受“取消”(最简单的方法:为此目的使用模态对话框,更方便用户:仅阻止本地视图命令)
    • 在与UI线程不同的单独线程中启动查询,使用Runnable实现
      • 有自己的cancel()方法
        • 呼叫cancelQuery resp。查询的cancel
        • 使用<query thread>.interrupt()将此事件发送给您的查询可运行;为此,您需要在<query thread>中存储对查询线程的引用。此信号有时会中断活动IO操作!
      • 能够处理InterruptedException中的SQLExceptionrun():如果这些异常是catched rollback transaction(如果只读取了一个只读查询)
      • 如果此runnable中有多个长时间运行的语句,则在每个语句后检查Thread.currentThread().isInterrupted(),如果结果为真,则cancel()
  • 在完成查询时将其结果与您的UI同步
  • 取消:
    • 调用您的查询可运行的cancel()
    • 忘记线程(但如果太多已取消的线程尚未完成,请确保不要耗尽系统资源或连接池)
    • 取消阻止您的用户界面

Swing和Eclipse RCP中都有辅助类支持这种设计。