我很好奇Oralce JDBC瘦客户端如何实现查询超时.这可以通过调用java.sql.Statement的setQueryTimeout(int seconds)方法来设置.
这是在客户端的驱动程序本身实现的吗?是一个新的线程产生并加入?或者JDBC驱动程序是否只是向Oracle发送参数,然后它会强制执行超时?
达到超时后,客户端和数据库上的哪些资源被释放,哪些存在?即使客户端放弃了查询还是终止,Oracle是否继续运行查询?客户端是否还有游标对象?
谢谢
我正在尝试使用Java设置网络超时我的Oracle数据库连接.但是,我收到了一个错误.下面是示例代码,它是相应的例外.
try{
conn = new Database("oracle").connect();
conn.setNetworkTimeout(null, 30000); //I don't have an Executor, so the field is set to null
System.out.println(Switch.date() + " -> Database Connection Initialized");
}
catch(SQLException ex){
Logger.getLogger(Switch.class.getName()).log(Level.SEVERE, null, ex);
}
Run Code Online (Sandbox Code Playgroud)
我得到的例外是:
Exception in thread "main" java.lang.AbstractMethodError:oracle.jdbc.driver.T4CConnection.setNetworkTimeout(Ljava/util/concurrent/Executor;I)V
at ke.co.smart.Switch.<init>(Switch.java:524)
at ke.co.smart.Switch.main(Switch.java:161)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)
我认为它与抽象方法有关(读取AbstractMethodError).什么可能导致这个错误,因为我只实现了我认为已经在Java中定义的方法,因此,不拒绝编译.
注意:如果有抽象方法,Java不允许编译具体类.