2012-05-14 54 views
1

我有一個應用程序,其中使用JDBC連接。當我從Eclipse環境運行它時,沒有任何問題,也沒有連接問題。 但是,當我打包成可執行的JAR文件,並從命令行運行它,同時呼籲與正確的憑據行從jar文件運行程序時,jdbc連接失敗

DriverManager.getConnection(url, user, password); 

,將應用程序凍結。 (錯誤的登錄嘗試一切正常 - 拋出SQLServerException)。 我試圖用不同的庫選項創建jar文件,但結果是一樣的。

任何人都可以幫忙嗎?

我用sqljdbc4.jar庫

構造我的數據庫類:

public Database(String url, String user, String password) throws SQLException, ClassNotFoundException { 
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 

    System.out.println("forname"); 
    connection = DriverManager.getConnection(url, user, password); 
    System.out.println("get connection"); 
} 

正確登錄後沒有拋出異常,「獲取連接」字符串沒有打印出來(僅「的forName」串打印)

回答

1

你在使用Java 6 Update 29嗎?如果是的話更新到Java 6 Update 30或更高版本(最好是最新版本:Update 32)。 Java版本中存在一個錯誤,導致Microsoft SQL Server JDBC驅動程序掛起。

+1

噢,是的,更新真的幫了它。謝謝你的幫助。 – xMichal

0

「冷凍」?你是否捕捉到一個空的catch塊的異常?

我打賭,JDBC驅動程序JAR在Eclipse中運行時處於CLASSPATH中,但在運行可執行JAR時不會發生。將Class-Path添加到JAR清單中,並將所有JAR與可執行JAR一起放入。這應該做到這一點。

+0

不,它真的被凍結了,沒有任何異常。類路徑是我以前的問題(也是發生異常),但隨後我使用庫打包了jar,問題如上所述發生了變化。 – xMichal

+0

Areyou捕捉異常?我敢打賭它扔了一個,你只是不知道。將JAR放入可執行JAR中並不行;您必須使用可執行JAR來部署它們。 – duffymo

+0

是的,我正在捕獲並打印異常,並且在登錄失敗時,會拋出異常。但是,當登錄是正確的,它確實沒有任何異常卡住。 「部署」意味着什麼? Eclipse導出到runnable jar有三種選擇:提取,打包和複製所需的庫。我嘗試了所有這些,但結果是一樣的。 – xMichal