MS SQL Server和JDBC:关闭连接

时间:2012-06-27 11:43:23

标签: java sql-server-2008

我得到了

  

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

从Java代码连接到MS SQL Server 2008时


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

  

JDBC:JTDS:SQLSERVER://机器:1433;的databaseName = DB; integratedSecurity =真


堆栈跟踪

  

java.sql.SQLException:I / O错误:数据库服务器已关闭连接。       at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2311)       at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:610)       at net.sourceforge.jtds.jdbc.ConnectionJDBC2。(ConnectionJDBC2.java:345)       at net.sourceforge.jtds.jdbc.ConnectionJDBC3。(ConnectionJDBC3.java:50)       at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)       at java.sql.DriverManager.getConnection(Unknown Source)       at java.sql.DriverManager.getConnection(Unknown Source)       在com.app.hibernate.test。(test.java:22)       在com.app.hibernate.test.main(test.java:53)   引起:java.io.IOException:DB服务器关闭连接。       at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:848)       at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:727)       at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466)       at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:103)       at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2206)       ......还有8个   线程“main”java.lang.NullPointerException中的异常       在com.app.hibernate.test.db(test.java:36)       在com.app.hibernate.test.main(test.java:54)

JDBC驱动程序

  

String url =“jdbc:sqlserver:// machine:1433; instance = SQLEXPRESS; databaseName = db”;

栈跟踪

  

com.microsoft.sqlserver.jdbc.SQLServerException:用户'username'登录失败。       at 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.sqlserver.jdbc.SQLServerConnection.access $ 000(SQLServerConnection.java:41)       在com.microsoft.sqlserver.jdbc.SQLServerConnection $ LogonCommand.doExecute(SQLServerConnection.java:2034)       在com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4003)       在com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1550)       在com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1207)       在com.microsoft.sqlserver.jdbc.SQLServerConnection.loginWithoutFailover(SQLServerConnection.java:1054)       在com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:758)       在com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:842)       at java.sql.DriverManager.getConnection(Unknown Source)       at java.sql.DriverManager.getConnection(Unknown Source)       在com.app.hibernate.test。(test.java:22)       在com.app.hibernate.test.main(test.java:53)   线程“main”java.lang.NullPointerException中的异常       在com.app.hibernate.test.db(test.java:36)       在com.app.hibernate.test.main(test.java:54)

3 个答案:

答案 0 :(得分:3)

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

试试这个

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

JDBC中的sql Conncetion代码

的Class.forName(#34&; com.microsoft.sqlserver.jdbc.SQLServerDriver&#34);
            Connection conn = DriverManager.getConnection(" jdbc:sqlserver:// janaka-PC; user = sa; password = 1234; database = Janak_DB");

答案 1 :(得分:2)

您的连接字符串存在问题

对于jTDS:

jdbc:jtds:sqlserver:// machineName:1433; databaseName = DB; useNTLMv2 = tru e; domain = workgroup

您可以阅读http://jtds.sourceforge.net/faq.html#windowsAuth以获取所需的单点登录库,以便NTLM正常工作。

使用JDBC驱动程序时,为jdts提供的

“integratedSecurity = true”是有效的

JDBC:SQLSERVER://机:1433;实例= SQLEXPRESS;的databaseName =分贝;的 integratedSecurity =真

答案 2 :(得分:0)

您在MS SQL端遇到身份验证错误。

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

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

如果应用程序在Windows计算机上运行,​​并且您希望使用已记录用户的凭据,则可以使用或不使用domain指定useNTLMv2参数。

最后,如果您在Windows计算机上但想要针对域对用户进行身份验证,则必须提供用户名,密码和域参数。您可以在jtds FAQ,特别是URL Format部分阅读所有相关信息。