gpt4 book ai didi

java - 无法使用 jTDS 连接到 SQL Server

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:14 25 4
gpt4 key购买 nike

我正在尝试通过 Java 连接到 SQL Server 2008 R2,但无法使用 jTDS 1.2.8 执行此操作。奇怪的是,使用 Microsoft JDBC 驱动程序它可以正常工作。是否需要打开某些服务器端设置才能使 jTDS 能够访问它?或者我只是在网址中遗漏了某些内容?

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

如果我将以下内容与 Microsoft 驱动程序一起使用,它会按预期工作,我可以毫无问题地访问数据库:

Connection connection = DriverManager.getConnection("jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433", user, password);

(userpassword 是之前声明的变量,因此我可以确定在连接任一驱动程序时使用相同的值。)

但是,如果我将以下内容与 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 URL(全部有效):

"jdbc:sqlserver://PHSSQL792:1433"
"jdbc:sqlserver://PHSSQL792:1433;databasename=pacsdb"
"jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433;databasename=pacsdb"

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

最佳答案

万一有人遇到这个问题,我稍后又回到这个问题并终于解决了问题。有问题的 SQL Server 实例被配置为需要 SSL 连接!我刚刚将 ssl=request 添加到 URL 以使其正常工作。

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

关于java - 无法使用 jTDS 连接到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22203378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com