2014-10-31 1 views
4

Я пытаюсь выполнить инструкцию DDL в базе данных Oracle 11g с помощью JDBC. Я делаю это, используя boolean execute(String SQL) класса Statement.В JDBC как узнать, успешно ли выполнялся оператор DDL?

Ниже приводится фрагмент кода, который выполняет запрос и пытается определить результат запроса:

// Create a SQL string 
String dropSql = "DROP TABLE Reviews"; 

stmt = conn.createStatement(); 

// Execute the query 
boolean result = stmt.execute(dropSql); 

// Get the result of the drop operation 
if(result) 
{ 
    // Its a result set 
    System.out.println("Atleast one result set has been returned. Loop through them"); 
} 
else 
{ 
    // Its an update count or no result 
    Integer updateCnt = stmt.getUpdateCount(); 

    if(updateCnt == -1) 
    { 
     // No results 
     System.out.println("No results returned by the query"); 
    } 
    else 
    { 
     // Update Count 
     System.out.println("Update Count: " + updateCnt); 
    } 
} 

Я не парень базы данных, но есть ситуации, когда оператор DDL бы не выполнить а не поднимать SQLException? Если нет, тогда мне не нужно фиксировать, что возвращает метод execute. Отсутствие SQLException указывает, что операторы DDL выполняются успешно.

tutorial, что я следую за recommendeds использования этого метода для операторов DDL:

boolean execute(String SQL) : ....... Use this method to execute SQL DDL statements or when you need to use truly dynamic SQL. 

Хотя Jdbc documentation рекомендует использовать int executeUpdate(String sql) для выполнения операторов DDL. Какой из них предпочтительнее?

ответ

4

Сбойная инструкция всегда будет поднимать SQLException независимо от того, какой метод используется для ее выполнения. executeUpdate подходит для любого оператора, который не может создать ResultSet, что идеально подходит для счета за заявление DDL.

3

Если вы не закроете DDL в PL/QSL и не поймаете это исключение, оно перейдет в режим JDBC-вызова.

Насколько можно использовать, любой из них отлично работает, потому что для DDL вы все равно должны игнорировать возвращаемое значение.

DDL не регистрируются как «подсчет строк», в отличие от DML, поэтому просто используйте try/catch для обнаружения сбоев и предположите в отсутствие исключения, что он был успешным.