java - 在Java中设置Oracle 10g数据库连接超时

标签 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");

    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/

相关文章:

Java 字符串拆分为 "."(点)

java - Qt Creator 3.2.1 包括适用于 Android 的 .jar

java - 使 @PostConstruct 仅对 StateLess EJB 的第一个实例执行

sql - 两个计数语句之间的区别

sql - 如何从oracle数据库中检索基于日期的记录

java - 调用方法?

java - 流式处理结果集错误

java - ImageIO.read() 是否总是返回具有透明度的 BufferedImage?

oracle - 在 ubuntu 18.04 上安装 oracle 12c R2

java - 尝试运行在线项目时出现 CannotGetJDBCConnectionException