Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “怎么做?”;取消查询";在SQL开发人员中工作_Java_Performance_Oracle_Oracle11g_Oracle Sqldeveloper - Fatal编程技术网

Java “怎么做?”;取消查询";在SQL开发人员中工作

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命令接受“取消”(最简单的方法:为此使用模式对话框,更方便用

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

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

我尝试过使用
viewObject.cancelQuery()但没有任何效果;查询一直执行到最后

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

我的建议是

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

  • Swing和EclipseRCP中都有支持这种设计的助手类。

    @bmorris591不是致命的。是查询的取消。会议没有结束。为什么每个人都认为我们有心灵感应?请解释发生了什么,而不是说“它不起作用”。你收到错误信息了吗?它最终会死吗?或者查询运行到完成?它可能是通过
    javax.sql.Statement.cancel()
    @APC:Well“不工作”意味着调用cancelQuery()不产生任何影响,查询执行将继续进行。是的,我是通过bc4jIn future提供的JDBC连接池连接的。请编辑您的问题,为我们提供更多信息,而不是使用评论。这个想法是为了改进你的帖子。长串的评论实际上使你的问题不那么可读。