【发布时间】:2014-04-07 20:13:56
【问题描述】:
我正在尝试通过 Java 连接到 SQL Server 2008 R2,但我无法使用 jTDS 1.2.8 进行连接。奇怪的是,它使用 Microsoft JDBC 驱动程序可以正常工作。是否需要打开一些服务器端设置才能使 jTDS 访问它?还是我只是在 URL 中遗漏了什么?
我没有使用 Windows 集成身份验证来指定凭据,也没有尝试使用 SSL 加密进行连接(我发现这些问题会产生我所看到的异常。)
如果我将以下内容与 Microsoft 驱动程序一起使用,它会按预期工作,我可以毫无问题地访问数据库:
Connection connection = DriverManager.getConnection("jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433", user, password);
(user 和 password 是之前声明的变量,因此我可以确定在连接任一驱动程序时使用相同的值。)
但是,如果我将以下内容与 jTDS 驱动程序一起使用:
Connection connection = DriverManager.getConnection("jdbc:jtds:sqlserver://PHSSQL792:1433;instance=PHSSQL792", user, password);
我收到以下错误:
java.sql.SQLException: I/O Error: DB server closed connection.
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2387)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:614)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:356)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:185)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at database.db_access.SqlServerDatabaseTestApp.main(SqlServerDatabaseTestApp.java:28)
Caused by: java.io.IOException: DB server closed connection.
at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:853)
at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:732)
at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:477)
at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:114)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2281)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:614)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:356)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:185)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at database.db_access.SqlServerDatabaseTestApp.main(SqlServerDatabaseTestApp.java:28)
我尝试使用和不使用数据库名称和/或使用/不使用实例名称进行连接,并得到了相同的结果。有什么建议吗?
编辑:
我尝试过的其他 jTDS 连接 URL(都给了我与上面相同的错误):
"jdbc:jtds:sqlserver://PHSSQL792:1433"
"jdbc:jtds:sqlserver://PHSSQL792:1433/pacsdb"
"jdbc:jtds:sqlserver://PHSSQL792:1433/pacsdb;instance=PHSSQL792"
对应的微软网址(都有效):
"jdbc:sqlserver://PHSSQL792:1433"
"jdbc:sqlserver://PHSSQL792:1433;databasename=pacsdb"
"jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433;databasename=pacsdb"
另外,我可以使用 jTDS 驱动程序成功连接到不同的 SQL Server 2008 R2 数据库(在不同的服务器上),所以它不是 jar。
【问题讨论】:
标签: java sql-server jdbc jtds