java - JDBC 连接不适用于 Sql Server 2012 或更高版本

标签 java jdbc sql-server-2012

下面的代码适用于 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/

相关文章:

java - 使用 Spring WebClient 反序列化整数列表

java - 需要 GPath 查询来查找最大日期 + 字符串字段

Java 单个 LinkedList 添加复杂度为 O(1)

java - 通过 jdbc 瘦驱动程序连接时出现 ORA-01017

sql - 如何在 SQL Server 2012 中搜索数据库中所有表中的列名?

java - 将 Mac Dock 图标上的放置事件传递给 shell 脚本及其子进程

java - 使用 Spring 和 Jdbc 访问数据库

java - 单个应用程序的两个不同数据库框架可以共享相同的连接对象吗?

sql - 对一列进行求和并从其他列中随机选择数据的算法

ssis - 为什么我们需要SSIS和数据仓库的星型模式?