2012-06-27 283 views
7

即時得到MS SQL Server和JDBC:關閉連接

I/O Error: DB server closed connection.

而從Java代碼連接到MS SQL Server 2008中。


SQL服務器處於混合模式及其在當地machine.My連接字符串 JTDS

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


堆棧跟蹤

java.sql.SQLException: I/O Error: DB server closed connection. 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) at com.app.hibernate.test.(test.java:22) at com.app.hibernate.test.main(test.java:53) Caused by: java.io.IOException: DB server closed connection. 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 more Exception in thread "main" java.lang.NullPointerException at com.app.hibernate.test.db(test.java:36) at com.app.hibernate.test.main(test.java:54)

JDBC驅動程序

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

堆棧跟蹤

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'username'. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:156) at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:240) at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:78) at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2636) at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2046) at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41) at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2034) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4003) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1550) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1207) at com.microsoft.sqlserver.jdbc.SQLServerConnection.loginWithoutFailover(SQLServerConnection.java:1054) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:758) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:842) at 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) Exception in thread "main" java.lang.NullPointerException at com.app.hibernate.test.db(test.java:36) at com.app.hibernate.test.main(test.java:54)

+1

你可以在這裏粘貼stacktrace嗎? –

+1

可能是一個服務器配置問題... – hovanessyan

+0

我添加了與問題 – Mukthi

回答

2

您的連接字符串的問題

對於JTDS:

的jdbc:JTDS:SQLSERVER://機器:1433;的databaseName = DB; useNTLMv2 = TRUË;域=工作組

你可以閱讀http://jtds.sourceforge.net/faq.html#windowsAuth爲所需的單點登錄庫NTLM工作。 SQLSERVER://機:使用JDBC驅動程序

JDBC時,您所提供的jdts

「integratedSecurity = true」 是有效的;例如= SQLEXPRESS;的databaseName = DB 1433; integratedSecurity = true

+0

我使用了這兩個URL,但在SQL服務器驅動器中**無法打開登錄請求的數據庫「DB」。登錄失敗。**雖然jtds ** USENTLMV2連接屬性無效。** – Mukthi

+0

如果即時設置** useNTLMv2 = false **他們即時獲得相同的登錄失敗錯誤。 – Mukthi

+0

但我可以訪問DB – Mukthi

0

您在MS SQL端有身份驗證錯誤。

如果你沒有在如何adquire連接(即您使用的數據源或連接池)控制,要使用的連接URL必須包含登錄名和密碼,如:

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

如果應用程序在Windows計算機上運行,​​並且您想使用已記錄用戶的憑據,則可以指定domain參數(帶或不帶useNTLMv2)。

最後,如果您在Windows計算機上,但想要根據域對用戶進行身份驗證,則必須提供用戶名,密碼和域參數。您可以在jtds FAQ中閱讀所有內容,尤其是URL Format部分。

3

您的連接字符串和身份驗證有錯誤。如果是混合模式不使用SQL認證

試試這個

PC名稱:janaka-PC SQL用戶名:SA SQL密碼
:1234數據庫:Janak_DB

sql代碼JDBC中的連接

Class.forName(「com.microsoft.sqlserver.jdbc.SQLServerDriver」);
Connection conn = DriverManager.getConnection(「jdbc:sqlserver:// janaka-PC; user = sa; password = 1234; database = Janak_DB」);