我正在使用Microsoft JDBC mssql-jdbc-7.0.0.jre8.jar连接到11.00.2100 MS-SQL Server。此时,我可以使用DBeaver进行连接,但是不能使用Tomcat甚至简单的Java + JDBC类进行连接。这些选择会因超时而失败。
我的JDBC URL是这样的:
jdbc:sqlserver://thundercat.md.pt:1433;database=MYDBNAME;instanceName=MYINSTANCENAME;user=myusername;password=mypassword;loginTimeout=50;
到目前为止,我的发现是:
服务器配置中必须有某些内容,因为我在同一网络中有一个类似的服务器,并且能够连接。但是我无法找出原因(在MS-SQL上不是很精明)。
尽管使用相同的JDBC驱动程序,但DBeaver的连接方式与Tomcat或我的简单类不同。使用tcpdump,我发现DBeaver以与端口1434的UDP连接开始,并在两个随机端口之间以tcp进行连接,但是我的简单类始终以与端口1433的tcp连接开始,以超时失败。
我的代码非常简单,如果我仅指向其他服务器,它就可以工作,因此它必须与此服务器上的网络设置和/或与此jdbc连接有关。
String connectionUrl =
"jdbc:sqlserver://" + host + ":1433;" + "database=" + database + ";" +
"instanceName=" + instance + ";" + "user=" + user + ";" +
"password=" + password + ";" +
"loginTimeout=50;";
Connection connection = DriverManager.getConnection(connectionUrl);
Statement statement = connection.createStatement();
尽管这些参数在DBeaver中有效,但由于Tomcat或我的简单类超时而失败。
这是与DBeaver成功连接的流量:
10:01:13.649901 IP 10.10.1.5.50031 > 10.10.3.50.1434: UDP, length 16
10:01:13.650674 IP 10.10.3.50.1434 > 10.10.1.5.50031: UDP, length 101
10:01:13.652401 IP 10.10.1.5.55025 > 10.10.3.50.49831: tcp 0
10:01:13.652823 IP 10.10.3.50.49831 > 10.10.1.5.55025: tcp 0
10:01:13.653400 IP 10.10.1.5.55025 > 10.10.3.50.49831: tcp 0
10:01:13.653452 IP 10.10.1.5.55025 > 10.10.3.50.49831: tcp 67
10:01:13.654168 IP 10.10.3.50.49831 > 10.10.1.5.55025: tcp 31
10:01:13.656148 IP 10.10.1.5.55025 > 10.10.3.50.49831: tcp 273
...
这是我的jdbc类的连接失败:
10:02:26.273941 IP 10.10.1.5.55074 > 10.10.3.50.1433: tcp 0
10:02:26.874860 IP 10.10.1.5.55076 > 10.10.3.50.1433: tcp 0
10:02:29.877173 IP 10.10.1.5.55076 > 10.10.3.50.1433: tcp 0
10:02:35.875310 IP 10.10.1.5.55076 > 10.10.3.50.1433: tcp 0
10:02:39.575984 IP 10.10.1.5.55086 > 10.10.3.50.1433: tcp 0
10:02:42.575554 IP 10.10.1.5.55086 > 10.10.3.50.1433: tcp 0
10:02:48.576195 IP 10.10.1.5.55086 > 10.10.3.50.1433: tcp 0
...
我想了解如何配置JDBC连接以使其像DBeaver一样工作。