下面的代码适用于 Sql Server 2008,但不适用于 Sql Server 2012 和 2014(v 11 或 12)
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://myhost\\myinstance:1433;database=mydb";
connection = DriverManager.getConnection(url,"username", "pwd");
我使用的是 Java 运行时 1.7
我正在使用 Microsoft 驱动程序,如您在下面的 Shell 行中看到的那样。
我尝试过
jar 驱动程序文件夹中的 sqljdbc_auth.dll (我尝试过 32 位和 64 位),
在 JRE bin 文件夹中,甚至作为 java.library.path 传递
我已在配置管理器(在 Sql Server 上)中检查 TCP/IP 是否已启用并在端口 1433 上响应。
防火墙已关闭。
这是我得到的错误:
c:\test\TestConn\Test2\bin>"C:\Program Files\Java\jre7\bin\java" -classpath C:\libsqlsvr\sqljdbc_6.0\ita\sqljdbc4.1.jar;. -Djava.library.path=C:\libsqlsvr\sqljdbc_6.0\ita\auth\x64 Test com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the hot myhost , port 1433 has failed. Error: "connect timed out. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.". at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(S QLServerException.java:190) at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExcepti onToSQLServerException(SQLServerException.java:241) at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:22 43) at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLSer verConnection.java:1309) at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConne ction.java:991) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerCon nection.java:827) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver. java:1012) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at Test.testsqlsvr(Test.java:135) at Test.main(Test.java:24)
你知道什么可能导致这个问题吗?
最佳答案
由于您在 JDBC 中使用 SQL Server 的 HOST:PORT
标识,因此您应该在 HOST 部分提供有效的 IP 或主机名,而不是实例名称(即没有“myhost\myinstance”) ",而是实际的网络主机名/IP)。
JDBC 连接通过普通 TCP,因此 HOST:PORT
是一个普通的网络地址,没有 Microsoft 魔法。 HOSTNAME\INSTANCE
使用驻留在已知端口 (UDP 1434) 上的调度程序服务 ( SQL Server Browser ),并根据 \INSTANCE
部分转发连接,而不是与端口结合。
关于java - JDBC 连接不适用于 Sql Server 2012 或更高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38617788/