我尝试使用以下代码设置连接超时:
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 - 在Java中设置Oracle 10g数据库连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669052/