Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 1.6和Oracle JDBC 14 setQueryTimeout不工作_Java_Sql_Database_Oracle_Jdbc - Fatal编程技术网

Java 1.6和Oracle JDBC 14 setQueryTimeout不工作

Java 1.6和Oracle JDBC 14 setQueryTimeout不工作,java,sql,database,oracle,jdbc,Java,Sql,Database,Oracle,Jdbc,我们运行Java1.6并使用最新的ojdbc14.jar。我们连接到一个远程Oracle数据库。 我们希望设置QueryTimeout,因为完成查询的时间不得超过2分钟 我已经这样做了: statement = conn.prepareCall(call); statement.setQueryTimeout(120); statement.executeQuery(); 大约8分钟后,它终于超时了!对此有什么想法或解决方法吗? 一如既往,非常感谢您的帮助 编辑:我们使用精简驱动程

我们运行Java1.6并使用最新的ojdbc14.jar。我们连接到一个远程Oracle数据库。 我们希望设置QueryTimeout,因为完成查询的时间不得超过2分钟

我已经这样做了:

  statement = conn.prepareCall(call);
  statement.setQueryTimeout(120);
  statement.executeQuery();
大约8分钟后,它终于超时了!对此有什么想法或解决方法吗? 一如既往,非常感谢您的帮助


编辑:我们使用精简驱动程序

请参见Oracle JDBC驱动程序中查询超时的工作原理:

长话短说:

  • 超时过期时,要取消SQL执行,需要对数据库进行一次完整的往返。数据库将在需要时开始处理取消请求
  • 驱动程序超时机制不是高精度机制。由于实际取消执行需要通过网络与数据库通信,因此没有必要使驱动程序超精确。即使驱动程序是精确的,数据库响应取消请求所需的网络延迟和时间也会抵消驱动程序的精确性。因此,超时时间是驱动程序在向服务器发送取消之前给SQL执行的最短时间
    尝试在客户端JVM系统属性中传递-Doracle.net.disableOob=true。根据

    从11g开始,Thin默认使用带外中断。如果用户更喜欢使用带内中断而不是带外中断,则此属性可以设置为true


    在某些情况下,底层协议不支持带外中断,或者数据库未配置为侦听带外中断。

    如果您使用的是Java SE 6,为什么不使用ojdbc6.jar?大多数驱动程序中对
    setQueryTimeout
    的AFAIK支持有限或不存在。请确保Oracle驱动程序确实支持它。好的,我将下载ojdbc6.jar并尝试使用它,谢谢…运气不好,仍然没有超时。我必须找到一个支持setQueryTimeout的jar:|您的驱动程序版本是石器时代!使用11.2.0.3.0。这与超时配合得很好。