首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用jTDS连接到Server

无法使用jTDS连接到Server
EN

Stack Overflow用户
提问于 2014-03-05 16:24:58
回答 4查看 10.1K关注 0票数 1

我正试图通过Java连接到Server 2008 R2,但我无法使用jTDS 1.2.8进行连接。奇怪的是,使用Microsoft驱动程序可以很好地工作。是否有一些服务器端设置需要打开以使jTDS能够访问它?还是我只是在URL中漏掉了什么?

我没有使用Windows集成身份验证来指定凭据,也没有尝试使用SSL加密进行连接(这些是我发现的问题,可以生成我正在看到的异常)。

如果我在Microsoft驱动程序中使用以下内容,它可以正常工作,我可以毫无问题地访问数据库:

代码语言:javascript
复制
Connection connection = DriverManager.getConnection("jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433", user, password);

(userpassword是前面声明的变量,所以我可以确保在与任何驱动程序连接时使用相同的值。)

但是,如果我在jTDS驱动程序中使用以下内容:

代码语言:javascript
复制
Connection connection = DriverManager.getConnection("jdbc:jtds:sqlserver://PHSSQL792:1433;instance=PHSSQL792", user, password);

我得到以下错误:

代码语言:javascript
复制
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(它们都给了我与上面相同的错误):

代码语言:javascript
复制
"jdbc:jtds:sqlserver://PHSSQL792:1433"
"jdbc:jtds:sqlserver://PHSSQL792:1433/pacsdb"
"jdbc:jtds:sqlserver://PHSSQL792:1433/pacsdb;instance=PHSSQL792"

相应的Microsoft URLS (它们都起作用):

代码语言:javascript
复制
"jdbc:sqlserver://PHSSQL792:1433"
"jdbc:sqlserver://PHSSQL792:1433;databasename=pacsdb"
"jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433;databasename=pacsdb"

而且,我可以使用R2驱动程序成功地连接到不同的Server 2008 jTDS数据库(在不同的服务器上),所以它不是jar。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-07 17:46:41

万一有人遇到这种情况,我会在很久之后再回到这个问题上,并最终解决了这个问题。所讨论的Server实例被配置为需要SSL连接!我只是将ssl=request添加到URL中以使其正常工作。

我认为微软驱动程序在没有显式设置SSL加密的情况下工作的原因是,总是最初与SSL连接以加密登录的用户名/密码。encrypt属性仅控制登录后数据是否加密。

票数 3
EN

Stack Overflow用户

发布于 2014-03-05 16:31:50

下面是我们使用的格式,它看起来非常接近您的:

代码语言:javascript
复制
jdbc:jtds:sqlserver://localhost:1433/Dev_DB;tds=8.0;lastupdatecount=true
票数 0
EN

Stack Overflow用户

发布于 2015-12-28 07:46:34

奇怪的是,你的连接字符串看起来是正确的。尝试直接设置用户和密码:

代码语言:javascript
复制
"jdbc:jtds:sqlserver://PHSSQL792:1433/pacsdb;instance=PHSSQL792;user=sa;password=pass"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22203378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档