我尝试使用以下代码设置连接超时:
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秒,则异常发生得如此之快!
答案 0 :(得分:4)
您的DriverManager.setLoginTimeout(1);
设置驱动程序在连接数据库时等待的最长时间秒。在您的情况下,它设置为1。
要设置无限制,请设置setLoginTimeout(0)
,其中0
表示无限制。
我希望这会有所帮助。
xxx
不存在, 更新,您希望Oracle驱动程序如何连接到数据库?设置loginTimeout
没有“主机”连接的时间长短没有任何区别。
答案 1 :(得分:0)
因为,在Java doc中,它显示:以秒为单位的超时,但在JDBC Oracle的实现中,它是毫秒。
您可以尝试使用毫秒数。