2012-10-07 28 views
4

我試圖用我的本地sql數據庫測試連接。我有這個代碼:jdbc.SQLServerException:任何用戶的用戶登錄失敗

try{ 
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
    DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=SocialFamilyTree;user=SOSCOMP"); 

}catch(Exception e){ 
    System.out.println("Couldn't get database connection."); 
    e.printStackTrace(); 
} 

我嘗試了很多用戶。我的Windows用戶是SOSCOMP,沒有密碼。我也知道SQL 2008創建用戶爲「sys」「dbo」,我也試過這些。我總是得到:

Couldn't get database connection. 
com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'SOSCOMP'. 

    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) 
    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246) 
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:83) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2532) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1929) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1917) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1061) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:833) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:716) 
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841) 
    at java.sql.DriverManager.getConnection(DriverManager.java:579) 
    at java.sql.DriverManager.getConnection(DriverManager.java:243) 
    at FT_Receiver.FT_Receiver.main(FT_Receiver.java:12) 

任何想法?

感謝

+0

這與android有什麼關係? – home

回答

12

如果你嘗試與數據庫連接的使用Windows身份驗證,您可以在連接字符串中使用「integratedSecurity」選項。

DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=SocialFamilyTree;integratedSecurity=true;"); 
+1

我得到: ** 2012年10月7日上午9時45分49秒com.microsoft.sqlserver.jdbc.AuthenticationJNI 警告:無法加載sqljdbc_auth.dll 無法獲取數據庫連接** – Mike

+2

[HTTP ://www.microsoft.com/en-us/download/details.aspx ID = 21599#filelis](http://www.microsoft.com/en-us/download/details.aspx?id=21599# filelis)在這裏你可以找到sqljdbc_auth.dll文件。 Yous可以將它複製到c:/ windows/system32(對於32位系統) – piotrp

+0

做到了。仍然**警告:無法加載sqljdbc_auth.dll原因: - 在java.library.path中沒有sqljdbc_auth ** – Mike

6

已經通過這個最近的步驟,我把解決幾乎同樣的問題被

  1. 使用SQL Server Management Studio中與所需的帳戶登錄並確認進入閱讀(寫如有必要)
  2. 使用SQL Server配置管理器,以確認服務器實例正在偵聽的IP地址進行鍼對性
  3. 禁用防火牆檢查沒有的方式獲得(並在必要時以備將來使用)添加例外

絕對踢球對我來說是瞭解什麼IP地址和端口的實例設置爲監聽,這樣,當我構建的連接字符串沒有被拒絕的連接。

另外,如果你想使用Windows登錄連接,你需要確保SQL實例配置爲混合模式身份驗證(即允許Windows和SQL登錄)

+0

它工作。我創建了一個用戶,但是當我與用戶一起登錄並嘗試訪問數據庫時,我得到:**數據庫SocialFamilyTree無法訪問(ObjectExplorer)**我如何授予此用戶權限。 – Mike

+1

我忘了啓用混合模式身份驗證,謝謝提醒,爲我工作。 –

1

回覆:是嗎。仍然警告:無法加載sqljdbc_auth.dll原因: - 在java.library.path中沒有sqljdbc_auth - 邁克10月7日在14:03

您必須添加此路徑到sqljdbc_auth.dll通過添加此VM參數下Eclipse或命令行: -Djava.library.path =「\ MS SQL Server JDBC驅動3.0 \ sqljdbc_3.0 \ enu \ auth \ x86」

這就是如果你正在運行32位Windows。否則最終的subdir會相應地改變。

我認爲這可能是一個更好的答案,雖然,以建立SQL Server用戶的身份驗證: Connecting SQL Server 2008 to Java: Login failed for user error

(我在這裏試着總結一下:http://silveira.wikidot.com/sql-server

1

既然你得到這個錯誤, Sql服務器正確地偵聽端口。

  1. 打開Sql Server Management Studio連接到您的服務器。
  2. 右鍵單擊服務器的圖標並選擇屬性。
  3. 轉到安全選項卡並勾選Sql Server和Windows 身份驗證模式。

如果您想要定義一個用戶,請從樹中轉到Security-> Logins,右鍵單擊登錄文件夾並單擊「New Login」。

現在你的服務器應該使用這個Url字符串。 使用服務器的日誌文件,可以幫助您瞭解其工作。