2015-04-17 1 views
1

Я хочу получить это исключение, но оно не работает. В основном, он выполняет следующий код: метод вызова 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 напечатает Трассирование и вы делаете System.exit в коде, который остановить программу. – Panther

+0

Являются ли 'HsqlException' и' org.hsqldb.HsqlException' тем же классом? Что говорит ваш импорт для 'HsqlException'? –

+0

Вы не получаете какую-либо ошибку компиляции? И я не понял, почему вы вызвали createConnection(); в верхнем блоке try, а также в блоке try в try? – Bikku

ответ

0

Это не исключение, вызванное методом, который вы вызываете.

2015-04-17T15: 12: 37,834 + 0100 ТЯЖЕЛАЯ не может возобновить БД При org.hsqldb.HsqlException: база данных не существует: DB \ dogsRus в org.hsqldb.error.Error.error (Неизвестно Источник)

это регистратор сообщений Java генерируется внутренне HSQLDB и в этом случае он отправляется по умолчанию в stderr который случается консоль. См. Руководство по работе с сообщениями журнала.

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(); throw исключение org.hsqldb.HsqlException, когда не влияет на e.printStackTrace() во второй попытке. Но я удалил последний и продолжаю бросать исключение. Также я пытаюсь поймать исключение и продолжать бросать исключение –

+0

Я вижу, вам нужно сделать попытку catch на createConnection() вместо исключения исключений, чтобы вы поймали сообщение и не выбрали это исключение. Исключением является метать внутри createConnection(); Я отредактировал свой отзыв – mvlaicevich

+0

Спасибо. И если я хочу проверить, существует ли база данных для создания новой? Поэтому я бросаю исключение в метод catch для конструктора. И он создает базу данных, если сбой и вызывается снова. –