2012-06-27 47 views
7

Im nhậnMS SQL Server và JDBC: đóng kết nối

I/O Error: DB server closed connection.

trong khi kết nối với MS SQL server 2008 từ mã java.


SQL server ở chế độ hỗn hợp và trong chuỗi kết nối machine.My địa phương là jTDS

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


stack trace là

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

bạn có thể dán stacktrace tại đây không? –

+1

có thể là sự cố cấu hình máy chủ ... – hovanessyan

+0

tôi đã thêm stacktrace với câu hỏi – Mukthi

Trả lời

2

Bạn gặp vấn đề trong chuỗi kết nối của bạn

Đối jTDS:

jdbc: jtds: sqlserver: // MachineName: 1433; DatabaseName = DB; useNTLMv2 = tru‌ e; domain = workgroup

Bạn có thể đọc http://jtds.sourceforge.net/faq.html#windowsAuth cho thư viện yêu cầu đăng nhập một lần để NTLM hoạt động.

"integratedSecurity = true" mà bạn cung cấp cho jdts là hợp lệ khi sử dụng trình điều khiển JDBC

jdbc: sqlserver: // máy: 1433; dụ = SQLEXPRESS; DatabaseName = db; integratedSecurity = true

+0

Tôi đã sử dụng cả URL nhưng trong khi trong ổ đĩa máy chủ SQL ** Không thể mở cơ sở dữ liệu "DB" được yêu cầu bởi thông tin đăng nhập. Đăng nhập thất bại. ** Trong khi jtds ** Thuộc tính kết nối USENTLMV2 không hợp lệ. ** – Mukthi

+0

Nếu im setting ** useNTLMv2 = false ** chúng sẽ nhận được lỗi đăng nhập không thành công. – Mukthi

+0

Nhưng tôi có thể truy cập các bảng hệ thống trong DB – Mukthi

0

Bạn có lỗi xác thực ở phía MS SQL.

Nếu bạn không kiểm soát được cách adquire kết nối (ví dụ, bạn đang sử dụng một Datasource hoặc một hồ bơi kết nối), URL kết nối phải chứa tên đăng nhập và mật khẩu được sử dụng, như:

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

Nếu ứng dụng đang chạy trên máy Windows và bạn muốn sử dụng thông tin đăng nhập của người dùng đã đăng nhập, thì bạn có thể chỉ định tham số domain có hoặc không có useNTLMv2.

Cuối cùng, nếu bạn đang ở trên máy tính Windows nhưng bạn muốn xác thực người dùng dựa trên tên miền, thì bạn phải cung cấp tên người dùng, mật khẩu và thông số tên miền. Bạn có thể đọc tất cả về nó trong jtds FAQ, đặc biệt là phần URL Format.

3

Chuỗi kết nối và xác thực của bạn có lỗi.nếu nó là chế độ hỗn hợp không sử dụng SQL authentication

Hãy thử điều này

PC Tên : Janaka-pc SQL User Name : sa SQL Password
: 1234 Cơ sở dữ liệu : Janak_DB

Mã cho sql Conncetion trong JDBC

Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Kết nối conn = DriverManager.getConnection ("jdbc: sqlserver: // janaka-PC; người dùng = sa; mật khẩu = 1234; cơ sở dữ liệu = Janak_DB");

Các vấn đề liên quan