以下代码适用于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)
你知道可能导致问题的原因吗?
答案 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
部分转发连接,并且不与端口组合。