【发布时间】:2016-07-28 00:03:52
【问题描述】:
以下代码适用于 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 测试 com.microsoft.sqlserver.jdbc.SQLServerException: 到热 myhost 的 TCP/IP 连接,端口 1433 失败。错误:“连接超时。验证连接属性。确保 SQL Server 实例正在主机上运行并在端口接受 TCP/IP 连接。确保与端口的 TCP 连接未被防火墙阻止。 ”。 在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(S QLServerException.java:190) 在 com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExcepti onToSQLServerException(SQLServerException.java:241) 在 com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:22 43) 在 com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLSer verConnection.java:1309) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConne ction.java:991) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerCon 连接.java:827) 在 com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver. 爪哇:1012) 在 java.sql.DriverManager.getConnection(未知来源) 在 java.sql.DriverManager.getConnection(未知来源) 在 Test.testsqlsvr(Test.java:135) 在 Test.main(Test.java:24)
你知道什么可能导致这个问题吗?
【问题讨论】:
-
尝试使用这种连接字符串格式:
jdbc:sqlserver://%s:%d;DatabaseName=%s;user=%s;password=%s,通过 String.format() 替换为主机名、端口、数据库名称、用户名和密码。不需要实例。
标签: java jdbc sql-server-2012