Установить тайм-аут соединения с базой данных Oracle 10g в Java - PullRequest
2 голосов
/ 12 января 2011

Я попытался установить время ожидания соединения с помощью следующего кода:

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 секунд, исключение происходит так же быстро, как и раньше!

Ответы [ 2 ]

4 голосов
/ 12 января 2011

Ваш DriverManager.setLoginTimeout(1); устанавливает максимальное время в секундах для драйвера, ожидающего при подключении к базе данных. В вашем случае он установлен на 1.

Чтобы не иметь ограничений, установите setLoginTimeout(0), где 0 означает отсутствие ограничений.

Надеюсь, это поможет.


Обновление , если ваш экземпляр xxx не существует, как вы ожидаете, что ваш драйвер Oracle подключится к базе данных? Не имеет значения, как долго вы устанавливаете loginTimeout, к которому нет «хоста» для подключения.

0 голосов
/ 08 августа 2011

Потому что в Java doc он показывает: время ожидания в секундах, а в реализации JDBC Oracle - миллисекунды.

Вы можете использовать меру в миллисекундах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...