JTDS JDBC не выдает исключение, когда это должно - PullRequest
0 голосов
/ 11 декабря 2011

У меня проблема со следующим кодом при использовании драйвера jTDS JDBC.Все работает, и запросы не проблема.Но я не получаю ошибку / исключение, если соединение не удается.Я пытался ввести ложный IP-адрес, отключить подключение к локальной сети, предоставить номер ложного порта и т. Д., Но не повезло.Мне действительно нужно знать, когда соединение не удается.

Кажется, что все останавливается на строке: "con = java.sql.DriverManager.getConnection (url, id, pass);"(Но только тогда, когда это действительно должно вызвать исключение ...)

import java.sql.SQLException;

public class Main {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {


    java.sql.Connection con = null;


    String url= "jdbc:jtds:sqlserver://x.x.x.x/DATABASE";
    String id= "seret";
    String pass = "secret";

    Class.forName("net.sourceforge.jtds.jdbc.Driver");


    System.out.println("Connecting to database...");

    con = java.sql.DriverManager.getConnection(url, id, pass);

    System.out.println("Connected?")
    //Program never gets here, but does not close either.

    if(con.isValid(1000)) System.out.println("Does not work either...");

    if(con!=null) con.close();      

    }

}

1 Ответ

0 голосов
/ 20 февраля 2012

Я не уверен, почему у вас нет исключения. Я получаю исключение SQLException (SQLState = S1000) при использовании SQL Server 2008 и SQL Server 2000 с jTDS 1.2.4.

Если обновление вашего драйвера jTDS не помогает, попробуйте добавить "; loginTimeout = 20" в строку URL. Так это будет выглядеть так:

String url= "jdbc:jtds:sqlserver://x.x.x.x/DATABASE;loginTimeout=20";

Затем снова запустите приложение и подождите не менее 20 секунд. Надеюсь, вы получите исключение тайм-аута.

Если настройка loginTimeout не помогла, вы также можете поиграть с настройкой socketTimeout. Хотя смотрите FAQ по jTDS, касающийся последствий использования socketTimeout. По сути, вы хотите установить его дольше, чем самый длинный запрос, ожидаемый вашим приложением.

...