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

在Java中设置Oracle 10g数据库连接超时,java,oracle,jdbc,timeout,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");

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

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)
线程“main”java.sql.SQLException中的异常:E/A-Exception:套接字未连接 位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) 位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) 位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:439) 位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:165) 位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) 位于java.sql.DriverManager.getConnection(未知源) 位于java.sql.DriverManager.getConnection(未知源) 位于my.package.connection.timeout.ConnectionTimeout.main(ConnectionTimeout.java:22) 如何对不存在或不可用的Oracle数据库实例实施超时

编辑:
如果我设置了
DriverManager.setLoginTimeout(30)到30秒,异常发生的速度和以前一样快

您的
DriverManager.setLoginTimeout(1)设置连接到数据库时驾驶员等待的最长时间(秒)。在您的情况下,它设置为1

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

我希望这有帮助



更新如果您的实例
xxx
不存在,您希望您的Oracle驱动程序如何连接到数据库?设置loginTimeout的时间不会有任何区别。

因为在Java文档中,它以秒为单位显示超时,但在JDBC Oracle的实现中,它以毫秒为单位


你可以试着用毫秒来衡量。

这不是我的意思。我想要一个小的超时来尝试恢复连接。我把超时设置为30秒的时间弄糊涂了!在1秒和30秒之间,异常会立即出现。或者在我的测试代码中可以吗?@Tim Krueger,请参阅更新的帖子。这就是为什么响应是立即的,没有主机。这是正确的吗?我尝试在循环中将超时设置为1进行连接,但从未得到超时。如果是1毫秒,我会感到惊讶。