使用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();
}
}
答案 0 :(得分:0)
我不确定为什么你没有得到例外。当使用SQL Server 2008和SQL Server 2000与jTDS 1.2.4时,我得到一个SQLException(SQLState = S1000)。
如果升级您的jTDS驱动程序没有帮助,您可以尝试将“; loginTimeout = 20”附加到您的URL字符串。所以它看起来像:
String url= "jdbc:jtds:sqlserver://x.x.x.x/DATABASE;loginTimeout=20";
然后重新运行您的应用程序并等待至少20秒。希望你会得到一个超时异常。
如果loginTimeout设置没有帮助,您也可以使用socketTimeout设置。虽然请参阅有关使用socketTimeout的含义的jTDS常见问题解答。基本上,您希望将其设置为比您希望应用程序执行的最长查询更长的时间。