2013-02-20 111 views
0

我在NetBeans 5.5.1中出現了一個奇怪的問題。我爲我的一個類創建了一個測試類。我測試的方法從一個名爲getConnection方法,這是因爲遵循它自己的連接:使用class.ForName註冊HSQLDB驅動程序

//This method was mainly done for an HSQLDB connection 
public static Connection getConnection(String connectionString,String databaseDriver, String user, String pass) throws Exception 
{ 
    Connection conn = null; 
    try 
    { 
     System.out.println("Registering database driver "+databaseDriver); 
     Class.forName(databaseDriver); 
     System.out.println("Successfully registered database driver "+databaseDriver); 
     Properties props = new Properties(); 
     props.setProperty("user",user); 
     props.setProperty("password",pass); 

     conn = DriverManager.getConnection(connectionString, props); 
    } 
     catch (ClassNotFoundException ex) 
     { 
     System.out.println("Reached catch block getConnection()"); 
     throw new Exception ("Unable to create connection to database", ex); 
    } 

    catch (Exception ex) 
    { 
     System.out.println("Reached catch block getConnection()"); 
     throw new Exception ("Unable to create connection to database", ex); 
    } 

     return new DatabaseConnection(conn).getConnection(); 

} 

我正在使用的數據庫驅動程序HSQLDB。 運行我的測試方法後,打印到我的輸出唯一的日誌語句是 註冊數據庫驅動程序org.hsqldb.jdbcDriver

我預期的結果是: 註冊數據庫驅動程序org.hsqldb.jdbcDriver 成功org.hsqldb.jdbcDriver

當我故意使用錯誤的數據庫驅動程序,我可以清楚地看到一個異常被拋出註冊數據庫驅動程序,這意味着我使用上述驅動程序的工作,並且它可以被發現在我的班級路徑。

那麼,似乎是什麼問題?

+0

該方法是否成功返回,或者'Class.forName'可能拋出'Error'(而不是'Exception')? – 2013-02-20 11:15:10

+0

不,方法就在那裏結束。我不認爲有任何異常會被拋出,因爲我的catch塊沒有被觸及。 – 2013-02-20 11:28:58

+1

這就是爲什麼我建議它可能是'Error'(它是'Throwable'的子類,但不是'Exception')。如果你把'catch(Exception ex)'改爲'catch(Throwable ex)',那麼你就可以看到這是否確實如此。 – 2013-02-20 11:38:03

回答

1

正如「Ian Roberts」所建議的那樣,當將異常捕獲爲Throwable時,我意識到Class.ForName正在抱怨一個糟糕的類號(當您嘗試使用比一個更老的JDK進行編譯時會發生這種情況你的圖書館)。將HSQLDB從2.2.9更改爲2.2.8.jdk5解決了該問題。

+0

Maven上有一個JDK5版本的HSQLDB 2.2.9 https://oss.sonatype.org/content/repositories/releases/org/hsqldb/hsqldb/2.2.9/ – fredt 2013-02-20 14:30:15

相關問題