簡體   English   中英

在Java中設置Oracle 10g數據庫連接超時

[英]Set Oracle 10g database connection timeout in Java

我嘗試使用以下代碼設置連接超時:

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秒,異常發生的速度和以前一樣快!

您的DriverManager.setLoginTimeout(1); 設置驅動程序在連接數據庫時等待的最長時間(以單位) 在您的情況下,它設置為1。

要沒有限制,請設置setLoginTimeout(0) ,其中0表示沒有限制。

我希望這有幫助。


如果您的實例xxx不存在,請更新 ,您如何期望Oracle驅動程序連接到數據庫? 設置沒有連接的“主機”的loginTimeout多長時間不會有任何區別。

因為在Java doc中,它顯示:超時(以秒為單位),但是在JDBC Oracle的實現中,以毫秒為單位。

您可以嘗試使用毫秒為單位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM