我試圖通過Java連接到SQL Server 2008 R2,並且我無法使用jTDS 1.2.8來這樣做。奇怪的是,它使用Microsoft JDBC驅動程序可以正常工作。是否需要打開一些服務器端設置才能使jTDS訪問它?或者我只是在URL中丟失了一些東西?我不使用Windows集成身份驗證指定憑據,我也沒有嘗試使用SSL加密連接無法使用jTDS連接到SQL Server
(這些都是我發現可以生成我看到異常的問題。)
如果我使用與微軟的驅動程序之後,它按預期工作,我也沒有任何問題訪問數據庫:
Connection connection = DriverManager.getConnection("jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433", user, password);
(user
和password
是早先聲明的變量,所以我可以肯定有連接,當我使用相同的值或者驅動程序。)
但是,如果我用了JTDS驅動程序如下:
Connection connection = DriverManager.getConnection("jdbc:jtds:sqlserver://PHSSQL792:1433;instance=PHSSQL792", user, password);
我得到以下錯誤:
java.sql.SQLException: I/O Error: DB server closed connection.
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2387)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:614)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:356)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:185)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at database.db_access.SqlServerDatabaseTestApp.main(SqlServerDatabaseTestApp.java:28)
Caused by: java.io.IOException: DB server closed connection.
at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:853)
at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:732)
at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:477)
at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:114)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2281)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:614)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:356)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:185)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at database.db_access.SqlServerDatabaseTestApp.main(SqlServerDatabaseTestApp.java:28)
我已經試過與不數據庫名稱連接,和/或帶/不帶實例名稱,並得到相同的結果。有什麼建議麼?
編輯:
其他JTDS連接的URL我已經試過(全部給了我上述同樣的錯誤):
"jdbc:jtds:sqlserver://PHSSQL792:1433"
"jdbc:jtds:sqlserver://PHSSQL792:1433/pacsdb"
"jdbc:jtds:sqlserver://PHSSQL792:1433/pacsdb;instance=PHSSQL792"
相應的Microsoft URL(所有工作):
"jdbc:sqlserver://PHSSQL792:1433"
"jdbc:sqlserver://PHSSQL792:1433;databasename=pacsdb"
"jdbc:sqlserver://PHSSQL792\\PHSSQL792:1433;databasename=pacsdb"
此外,我可以使用jTDS驅動程序成功連接到不同的SQL Server 2008 R2數據庫(在不同的服務器上)所以它不是罐子。
簡單地粘貼代碼並不被認爲是一個好的答案。雖然這可能是正確的,但它不會幫助OP瞭解他們的問題或解決方案。 – leigero