2012-06-27 2 views
7

Im получаяMS SQL Server и JDBC: закрыто подключение

I/O Error: DB server closed connection.

при подключении к MS SQL Server 2008 из кода Java.


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 Driver

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

StackTrace

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

Я добавил stacktrace с вопросом – Mukthi

ответ

2

У вас есть проблемы в ваших строках подключения

Для jTDS:

: jtds JDBC: SQLServer: // имя_компьютера: 1433; Databasename = DB; useNTLMv2 = Tru е; домен = рабочая группа

Вы можете прочитать http://jtds.sourceforge.net/faq.html#windowsAuth для требуемой библиотеки Single-Sign-On для NTLM для работы.

"integratedSecurity = истина", что вы указали на jdts действительна при использовании драйвера JDBC

JDBC: SQLServer: // Машина: 1433, экземпляр = SQLEXPRESS; Databasename = дБ; integratedSecurity = true

+0

Я использовал оба URL, но в то время как на сервере SQL-сервера ** Не удается открыть базу данных «БД», запрошенную логином. Ошибка входа в систему. ** В то время как jtds ** свойство соединения USENTLMV2 недопустимо. ** – Mukthi

+0

Если im setting ** useNTLMv2 = false ** им получить ту же ошибку с ошибкой входа в систему. – Mukthi

+0

Но я могу получить доступ к системным таблицам в DB – Mukthi

0

У вас есть ошибка аутентификации на стороне MS SQL.

Если вы не в состоянии контролировать, как adquire соединение (то есть, вы используете Datasource или пул соединений), то 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-ПК SQL Имя пользователя : са SQL Пароль
: 1234 Database : Janak_DB

Код для SQL Conncetion в JDBC

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

Смежные вопросы