0

我对使用 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();      

    }

}
4

1 回答 1

0

我不确定为什么你没有得到例外。在使用带有 jTDS 1.2.4 的 SQL Server 2008 和 SQL Server 2000 时,我确实得到了 SQLException (SQLState=S1000)。

如果升级您的 jTDS 驱动程序没有帮助,您可以尝试将“;loginTimeout=20”附加到您的 URL 字符串。所以它看起来像:

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

然后重新运行您的应用程序并等待至少 20 秒。希望你会得到一个超时异常。

如果 loginTimeout 设置没有帮助,您也可以使用 socketTimeout 设置。尽管请参阅 jTDS FAQ 关于使用 socketTimeout 的影响。基本上,您希望将其设置为比您希望应用程序执行的最长查询更长的时间。

于 2012-02-20T15:32:55.693 回答