2015-12-08 4 views
0

Я пытаюсь удалить некоторые объекты в базе данных Oracle, используя jdbc. Я хочу пропустить, если возникла ошибка ORA-04043. Ниже приведен код, который я построил.Java: Как игнорировать некоторые SQLException?

Эта строковая переменная массива SqlList.uninstall_OS_COMMAND_SQL.

public static String[] uninstall_OS_COMMAND_SQL = { 
     "DROP PACKAGE OS_COMMAND", 
     "DROP PACKAGE LOB_WRITER_PLSQL", 
     "DROP TYPE OSCOMMAND_VC2_ARRAY", 
     "DROP TYPE OSCOMMAND_DIR_ARRAY", 
     "DROP TYPE OSCOMMAND_DIR_ENTRY", 
     "DROP TYPE FILE_LIST_TYPE", 
     "DROP TYPE FILE_TYPE", 
     "DROP PACKAGE FILE_PKG", 
     "DROP JAVA SOURCE \"OS_HELPER\"", 
     "DROP JAVA SOURCE \"FILE_TYPE_JAVA\"", 
     "DROP PACKAGE FILE_SECURITY" 
    }; 

и это код.

private void uninstallOS_COMMAND_Step1_For_11g() { 
     Connection targetDBconn = null; 
     Statement stmt = null; 

     try { 
      targetDBconn = globalTargetConn.connect(); 
      logWriter.writeLogs(logTextArea, LogWriter.INFO, "Uninstalling OS_COMMAND package..."); 
      for (int i = 0; i < SqlList.uninstall_OS_COMMAND_SQL.length; i++) { 
       stmt = targetDBconn.createStatement(); 
       stmt.setEscapeProcessing(false); 
       logWriter.writeLogs(logTextArea, LogWriter.INFO, "See the query below..."); 
       logWriter.writeLogs(logTextArea, LogWriter.INFO, "\n"+SqlList.uninstall_OS_COMMAND_SQL[i]); 
       stmt.executeUpdate(SqlList.uninstall_OS_COMMAND_SQL[i]); 
      } 
     } catch (SQLException ex) { logWriter.writeLogs(logTextArea, LogWriter.ERROR, ex.getMessage()); 
     } finally { 
      if (stmt != null) try {stmt.close();} catch(SQLException ex) {} 
      if (targetDBconn != null) try {targetDBconn.close();} catch(SQLException ex) {} 
     } 
    } 

Если я запустил этот код, он выполняет только один элемент в массиве и останавливает весь метод. Пожалуйста, помогите мне ..

+0

Можете ли вы запустить запрос, который проверяет, существуют ли разные вещи? –

+0

Да, но это вызывает у меня головокружение, чтобы сделать больше кода, я просто хочу сделать его коротким и просто пропустить конкретную ошибку. Как только я ссылаюсь на эту ссылку (https://docs.oracle.com/javase/tutorial/jdbc/basics/sqlexception.html), я думаю, что есть подсказка для меня, но я полностью не могу понять .. :( – James

+0

Если вы хотите есть исключение и двигаться дальше, ничего не мешает вам это делать. –

ответ

0

вы могли бы рассмотреть, чтобы поставить и попробовать поймать внутри цикла.

0

Создать один новый метод и вызвать новый метод внутрициклового

Как

execute(Statement stmt, SQL Command) throws Exception { 
    try { 
      stmt.executeUpdate(SqlList.uninstall_OS_COMMAND_SQL[i]); 
    } catch(SQLException s) { 
    //LOG error 
     if (s.getMessage().contains("ORA-04043")) { 

     } else { 
      throw s; 
     } 
    } catch (Exception ee) { 
     throw ee; 
    } 
    } 
+0

Но что, если я столкнулся с другой ошибкой, кроме ORA-04043, метод должен быть остановлен и выдать ошибку logTextArea. – James