在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毫秒,我会感到惊讶。