【发布时间】:2013-09-20 06:43:43
【问题描述】:
我正在尝试用 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);
}
我得到的例外是:
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
我相信这与抽象的方法有关(阅读 AbstractMethodError)。什么可能导致这个错误,因为我只实现了我认为已经在 Java 中定义的方法,因此不会拒绝编译。
注意:如果有抽象方法,Java 不允许编译具体类。
【问题讨论】:
-
Oracle驱动的版本是多少?也许较新的版本实现了该方法。 (注意:文件名“ojdbc6”或“ojdbc5”中的数字不是驱动程序版本)。
-
如果您真的想解决 DCD(死连接检测)问题,您应该切换到 OCI 驱动程序并在 OCI 级别(在 sqlnet.ora 中)进行配置。 “最好的”方式是使用 TCP keepalive 技术。但这需要 DBA 和 Unix 管理员的帮助。