9

我越来越

I/O 错误:数据库服务器已关闭连接。

从 java 代码连接到 MS SQL server 2008 时。


SQL 服务器处于混合模式,它在本地机器上。我的连接字符串是 jTDS

jdbc:jtds:sqlserver://machineName:1433;databaseName=DB;integratedSecurity=true


堆栈跟踪是

java.sql.SQLException:I/O 错误:数据库服务器关闭连接。在 net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2311) 在 net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:610) 在 net.sourceforge.jtds.jdbc.ConnectionJDBC2.( ConnectionJDBC2.java:345) 在 net.sourceforge.jtds.jdbc.ConnectionJDBC3.(ConnectionJDBC3.java:50) 在 net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 在 java.sql.DriverManager。 getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.app.hibernate.test.(test.java:22) at com.app.hibernate.test.main(test.java:53)引起:java.io.IOException:数据库服务器关闭连接。在 net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:848) 在 net.sourceforge.jtds.jdbc.SharedSocket。

JDBC 驱动程序

字符串 url ="jdbc:sqlserver://machine:1433;instance=SQLEXPRESS;databaseName=db";

堆栈跟踪

com.microsoft.sqlserver.jdbc.SQLServerException:用户“用户名”登录失败。在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:156) 在 com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:240) 在 com.microsoft.sqlserver.jdbc.TDSParser.parse (tdsparser.java:78) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2636) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2046) 在 com.microsoft。 com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2034) 在 com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer) 的 sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41) .java:4003) 在 com.microsoft。

4

3 回答 3

4

您的连接字符串和身份验证有错误。如果是混合模式,请不要使用SQL 身份验证

尝试这个

PC 名称 :janaka-pc SQL 用户名:sa SQL 密码
:1234数据库 :Janak_DB

JDBC中的sql连接代码

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
连接连接 = DriverManager.getConnection("jdbc:sqlserver://janaka-PC;user=sa;password=1234;database=Janak_DB");

于 2015-03-05T02:28:30.393 回答
2

您的连接字符串有问题

对于 jTDS:

jdbc:jtds:sqlserver://machineName:1433;databaseName=DB; 使用NTLMv2=tru‌​e;域=工作组

您可以阅读http://jtds.sourceforge.net/faq.html#windowsAuth以了解 NTLM 工作所需的单点登录库。

您为 jdts 提供的“integratedSecurity=true”在使用 JDBC 驱动程序时有效

jdbc:sqlserver://machine:1433;instance=SQLEXPRESS;databaseName=db; 综合安全=真

于 2012-07-01T21:20:25.813 回答
0

您在 MS SQL 端出现身份验证错误。

如果您无法控制如何获取连接(即,您使用的是数据源或连接池),则连接 URL 必须包含要使用的登录名和密码,例如:

jdbc:sqlserver://machine:1433;instance=SQLEXPRESS;databaseName=db;user=USERNAME;password=PASSWORD";

如果应用程序在 Windows 机器上运行并且您想要使用登录用户的凭据,那么您可以domain使用或不使用 指定参数useNTLMv2

最后,如果您在一台 Windows 机器上但您想针对域对用户进行身份验证,那么您必须提供用户名、密码和域参数。您可以在jtds FAQ中阅读所有相关信息,特别是URL 格式部分。

于 2012-07-01T21:44:37.293 回答