【问题标题】:Set Oracle 10g database connection timeout in Java在 Java 中设置 Oracle 10g 数据库连接超时
【发布时间】:2011-06-07 19:56:13
【问题描述】:

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

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 秒,异常发生的速度和以前一样快!

【问题讨论】:

    标签: java oracle jdbc timeout


    【解决方案1】:

    因为在Java doc中是显示:timeout in seconds,但是在JDBC Oracle的实现中是毫秒。

    您可以尝试使用毫秒度量。

    【讨论】:

    • 这是正确的吗?我尝试在循环中将超时设置为 1 进行连接,但从未超时。如果是 1 毫秒,那会让我感到惊讶。
    【解决方案2】:

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

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

    我希望这会有所帮助。


    更新如果您的实例 xxx 不存在,您希望您的 Oracle 驱动程序如何连接到数据库?将loginTimeout 设置多长时间没有任何区别,因为没有“主机”可以连接。

    【讨论】:

    • 这不是我的意思。我想要一个小的超时来尝试建立连接。当我将超时设置为 30 秒时,我感到很困惑!在 1 和 30 秒之间,异常立即出现。或者在我的测试代码中可以吗?
    • @Tim Krueger,请参阅更新后的帖子。这就是为什么响应是即时的,没有主机。
    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多