2015-04-17 25 views
1

我想捕獲該異常,但它不起作用。基本上它跟隨的代碼是call方法createConnection(),用於嘗試連接到數據庫。如果數據庫不存在則拋出兩個異常。我抓住這兩個,但只適用於SQLException中並沒有爲HsqlExceptionCatch HsqlException

try { 
     createConnection(); 
    } catch (HsqlException | SQLException e1) { 
     System.out.println("Not exist the DataBase. Creating a new one."); 
     new CreateDB(); 
    }finally{ 
     try { 
      createConnection(); 
     } catch (SQLException | org.hsqldb.HsqlException e) { 
      e.printStackTrace(); 
      System.out.println("Some big error ocurred. Please contact me."); 
      System.exit(0); 
     } 
    } 

從的createConnection(代碼)

和例外是

2015-04-17T15:12:37.834+0100 SEVERE could not reopen database 
org.hsqldb.HsqlException: Database does not exists: db\dogsRus 
    at org.hsqldb.error.Error.error(Unknown Source) 
    at org.hsqldb.error.Error.error(Unknown Source) 
    at org.hsqldb.persist.Logger.open(Unknown Source) 
    at org.hsqldb.Database.reopen(Unknown Source) 
    at org.hsqldb.Database.open(Unknown Source) 
    at org.hsqldb.DatabaseManager.getDatabase(Unknown Source) 
    at org.hsqldb.DatabaseManager.newSession(Unknown Source) 
    at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source) 
    at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source) 
    at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at ac.uk.jov2.dogsRus.database.DataBaseUtil.createConnection(DataBaseUtil.java:90) 
    at ac.uk.jov2.dogsRus.database.DataBaseUtil.<init>(DataBaseUtil.java:54) 
    at ac.uk.jov2.dogsRus.database.DataBase.<init>(DataBase.java:16) 
    at ac.uk.jov2.dogsRus.Application.<init>(Application.java:28) 
    at ac.uk.jov2.dogsRus.Application.main(Application.java:388) 
+0

你怎麼知道它不是逮住甚至printstrace將打印strace的,你在做代碼system.exit其停止程序。 – Panther

+0

'HsqlException'和'org.hsqldb.HsqlException'是同一個類嗎?你對'HsqlException'的輸入是什麼意思? –

+0

你沒有收到任何編譯錯誤?我沒有明白你爲什麼要調用createConnection();在頂部嘗試塊,也在最後的嘗試塊? – Bikku

回答

0

這不是您調用的方法拋出的異常。

2015-04-17T15:12:37.834 + 0100嚴重不能重新打開數據庫 org.hsqldb.HsqlException:數據庫不存在:DB \ dogsRus 在org.hsqldb.error.Error.error(未知源)

它是由HSQLDB並且在這種情況下,它被默認發送到恰好是控制檯stderr內部產生一個Java記錄器的消息。有關如何處理記錄器消息,請參閱指南。

http://hsqldb.org/doc/2.0/guide/management-chapt.html#mtc_jdc_logging

0

你需要改變你的createConnection()方法。你不想在那裏拋出異常。

void createConnection(){ 
    try{ 
    conn = DriverManager.getConnection(URL + DB_FILE +";ifexists=true"); 
    } catch (SQLException | org.hsqldb.HsqlException e) { 
     e.printStackTrace(); 
     System.out.println("Some big error ocurred. Please contact me."); 
     System.exit(0); 
    } 
} 
+0

感謝您的回答。第一次被稱爲createConnection();在第二次嘗試時不會影響e.printStackTrace()時拋出異常org.hsqldb.HsqlException。但我刪除了最後一個並繼續拋出異常。另外,我嘗試捕獲異常並繼續拋出異常 –

+0

我看到,您需要嘗試捕獲createConnection()而不是拋出異常,以便捕獲該消息並且不拋出該異常。拋出createConnection()方法的例外情況;我編輯了我的回覆 – mvlaicevich

+0

謝謝。如果我想檢查數據庫是否存在以創建新的數據庫?因爲這就是爲什麼我在catch方法中拋出異常的原因。如果失敗並且被再次調用,它會創建數據庫。 –