我正试图通过Java连接到Server 2008 R2,但我无法使用jTDS 1.2.8进行连接。奇怪的是,使用Microsoft驱动程序可以很好地工作。是否有一些服务器端设置需要打开以使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"相应的Microsoft URLS (它们都起作用):
"jdbc:sqlserver://PHSSQL792:1433"
"jdbc:sqlserver://PHSSQL792:1433;databasename=pacsdb"
"jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433;databasename=pacsdb"而且,我可以使用R2驱动程序成功地连接到不同的Server 2008 jTDS数据库(在不同的服务器上),所以它不是jar。
发布于 2017-02-07 17:46:41
万一有人遇到这种情况,我会在很久之后再回到这个问题上,并最终解决了这个问题。所讨论的Server实例被配置为需要SSL连接!我只是将ssl=request添加到URL中以使其正常工作。
我认为微软驱动程序在没有显式设置SSL加密的情况下工作的原因是,总是最初与SSL连接以加密登录的用户名/密码。encrypt属性仅控制登录后数据是否加密。
发布于 2014-03-05 16:31:50
下面是我们使用的格式,它看起来非常接近您的:
jdbc:jtds:sqlserver://localhost:1433/Dev_DB;tds=8.0;lastupdatecount=true发布于 2015-12-28 07:46:34
奇怪的是,你的连接字符串看起来是正确的。尝试直接设置用户和密码:
"jdbc:jtds:sqlserver://PHSSQL792:1433/pacsdb;instance=PHSSQL792;user=sa;password=pass"https://stackoverflow.com/questions/22203378
复制相似问题