[oracle]JDBC 连接设置网络超时

标签: JDBC Java Oracle
发布时间: 2017/4/14 23:55:35
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图在 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 不允许编译的具体类。

解决方法 1:

setNetworkTimeout()介绍了 JDBC 4.1 和 JDBC 4.0 中不在场。

你会想要 ojdbc7,因为 JDBC 4.1 只进来了,Java 7 如果你想要使用 setNetworkTimeout() 方法。

根本的问题是将方法添加到接口在后期规格可以导致老年人实现这些接口来破除错误。 即将到来的 Java 8,默认方法的新功能之一希望可以使这略少的问题。


显然也是可以修改套接字超时的 Oracle JDBC 驱动程序属性。

你还可以尝试使用此 Oracle JDBC 属性来设置套接字超时时间,如果你使用的瘦驱动程序︰

Properties props = new Properties();
props.setProperty("user", "dbuser");
props.setProperty("password", "dbpassword");
props.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_CONNECT_TIMEOUT, "2000");

Connection con = DriverManager.getConnection("<JDBC connection string>", props);
赞助商