【问题标题】:JDBC connection doesn't work with Sql Server 2012 or higherJDBC 连接不适用于 Sql Server 2012 或更高版本
【发布时间】: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


【解决方案1】:

由于您在 JDBC 中使用HOST:PORT 标识 SQL Server,因此您应该在 HOST 部分提供有效的 IP 或主机名,而不是实例名称(即没有“myhost\myinstance”,而是实际的网络主机名/IP)。

JDBC 连接通过普通的 TCP,所以HOST:PORT 是一个普通的网络地址,没有微软的魔法。 HOSTNAME\INSTANCE 使用驻留在已知端口 (UDP 1434) 上的调度程序服务 (SQL Server Browser) 并根据 \INSTANCE 部分转发连接,并且不与端口结合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多