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

时间:2016-07-27 15:49:35

标签: 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 Runtime 1.7

我正在使用Microsoft驱动程序,如下面的Shell行中所示。

我试过试试 sqljdbc_auth.dll(我已尝试过32位和64位)在jar驱动程序文件夹中,
在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,端口1433的TCP / IP连接失败。错误:“连接超时。验证连接属性。确保主机上正在运行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               nection.java:827)                       在com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver。               的java:1012)                       at java.sql.DriverManager.getConnection(Unknown Source)                       at java.sql.DriverManager.getConnection(Unknown Source)                       在Test.testsqlsvr(Test.java:135)                       在Test.main(Test.java:24)

你知道可能导致问题的原因吗?

1 个答案:

答案 0 :(得分:2)

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

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