在Java中设置Oracle 10g数据库连接超时

时间:2011-01-12 12:58:40

标签: java oracle jdbc timeout

我尝试使用以下代码设置连接超时:

public class ConnectionTimeout {  
  public static void main(String[] args) throws Exception {

    String entry = "jdbc:oracle:thin:@xxx:1521:xxx";
    Connection con=null;

    Class.forName("oracle.jdbc.driver.OracleDriver");

    DriverManager.setLoginTimeout(1);        
    con=DriverManager.getConnection(entry,"username","password");    

    Statement s=con.createStatement();    
    s.execute("select 1 from dual");    
    s.close();

    con.close();
  }
}

实例xxx不存在。但我得到以下例外:

Exception in thread "main" java.sql.SQLException: E/A-Exception: Socket is not connected
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:439)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at my.package.connection.timeout.ConnectionTimeout.main(ConnectionTimeout.java:22)

如何实现对不存在或可用的Oracle数据库实例的超时?

修改 如果我将DriverManager.setLoginTimeout(30);设置为30秒,则异常发生得如此之快!

2 个答案:

答案 0 :(得分:4)

您的DriverManager.setLoginTimeout(1);设置驱动程序在连接数据库时等待的最长时间。在您的情况下,它设置为1。

要设置无限制,请设置setLoginTimeout(0),其中0表示无限制。

我希望这会有所帮助。


如果您的实例xxx不存在,

更新,您希望Oracle驱动程序如何连接到数据库?设置loginTimeout没有“主机”连接的时间长短没有任何区别。

答案 1 :(得分:0)

因为,在Java doc中,它显示:以秒为单位的超时,但在JDBC Oracle的实现中,它是毫秒。

您可以尝试使用毫秒数。