2011-11-19 131 views
0

我試圖使用scala訪問SQL Server 2008,但沒有任何成功。下面是我的示例代碼:使用集成身份驗證通過Windows 2008 64位上的Scala/JDBC訪問SQL Server 2008 R2

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
val connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=XXX;integratedSecurity=true;"; 
val con = DriverManager.getConnection(connectionUrl); 

,這裏是我的錯誤:

com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1352) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1339) 
     at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1654) 
     at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3694) 
     at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:5026) 
     at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4978) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2528) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1905) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1893) 
     at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1045) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:817) 
     at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:700) 
     at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:842) 
     at java.sql.DriverManager.getConnection(Unknown Source) 
     at java.sql.DriverManager.getConnection(Unknown Source) 

我不知道發生了什麼事情錯了,我沒能得到任何進一步的調試輸出。我檢查了以下內容:

  • 當然,Sql服務器已啓動並運行,可以通過Management Studio或通過.Net代碼訪問。
  • 我有64位Java安裝,我正在使用64位sqljdbc_auth.dll。我嘗試了32位版本(只是爲了確保),並得到了預期的錯誤,告訴我使用64位版本。
  • 如果我從連接字符串中刪除integratedSecurity = true,則會從SQL Server獲得預期的身份驗證錯誤:用戶「Login」登錄失敗。

很明顯,綜合認證是問題。任何提示如何解決或如何進一步調試?

+0

你有沒有考慮通過用戶名和密碼? –

+0

對不起,我忘了提及:用戶名/密碼不是一個選項。 – Achim

+0

你工作過嗎? SQL Server日誌說什麼,它應該給一個指示。 – cairnz

回答

0

MSDN page建議您要複製一個文件,或者更改路徑:

要使用集成的身份驗證,sqljdbc_auth.dll文件複製到 目錄Windows系統路徑上的計算機,其中上JDBC 驅動程序已安裝。

在「與集成身份驗證連接」部分下。

+0

看到我的第二個要點。該文件已存在。 – Achim

0

我已經使用jTDS開源驅動程序通過JDBC訪問SQL Server數據庫(http://jtds.sourceforge.net/)獲得了更多成功。

我用這個來連接到使用此連接URL一個SQL Server 2008實例:

jdbc:jtds:sqlserver://localhost/DatabaseName;instance=InstanceName 

我的連接似乎仍當我添加屬性​​工作,但似乎有必要也沒有。我相信jTDS文檔說你不應該用分號結束連接URL。

您必須將ntmlauth.dll文件添加到您的JRE/JDK /bin目錄中。 您還必須確保SQL Server Browser服務正在運行。我的理解是,對於jTDS驅動程序和Microsoft驅動程序來說都是如此(運行SQL Server配置管理器並標記SQL Server Browser服務,您可能希望將其設置爲在啓動時自動啓動)。

JTDS的另一大好處是,你可以,如果你使用Maven得到它通過一個Maven倉庫:

<dependency> 
    <groupId>net.sourceforge.jtds</groupId> 
    <artifactId>jtds</artifactId> 
    <version>1.2.4</version> 
</dependency> 
相關問題