2016-01-25 4 views
1

Я пытаюсь выполнить следующий код.Подготовленный отчет с ошибкой DB2 SQL

public static void main(String[] args) throws Exception { 
     Connection connection = null; 
     try { 
      Class.forName("com.ibm.db2.jcc.DB2Driver"); 
     } catch (ClassNotFoundException ex) { 
      ex.printStackTrace(); 
     } 
     try { 
      System.out.println(); 
      connection = DriverManager.getConnection("jdbc:db2://localhost:port/database", username, password); 
      connection.setAutoCommit(false); 
      // String plsql = "BEGIN INSERT INTO t VALUES(42); COMMIT; END;"; 
      String plsql = "BEGIN UPDATE TABLE SET PROPERTY_VALUE='test6' where property_name='TEST'; COMMIT; END;"; 
      PreparedStatement pstatement = connection.prepareStatement(plsql); 
      pstatement.execute(); 


     } catch (SQLException ex) { 
      ex.printStackTrace(); 
     } 
    } 

И я получаю следующее сообщение об ошибке:

com.ibm.db2.jcc.b.co: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=END;NAME='TEST'; COMMIT;;END, DRIVER=3.53.70 

Как решить эту проблему. почему подготовленный оператор поддерживает этот сценарий?

+0

Вам нужно удалить самую последнюю точку с запятой после 'END', из вашего оператора. – mustaccio

+0

Я попытался удалить точку с запятой после END. Теперь я получаю другую ошибку. – jane

+0

com.ibm.db2.jcc.b.co: Ошибка DB2 SQL: SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = вызов BEGIN; BEGIN-OF-STATEMENT; , DRIVER = 3.53.70 – jane

ответ

0

Я думаю, что вам нужно сделать commit транзакцию с использованием вызова JDBC до connection.commit().

Этот article дает вам хороший пример.

Ваш код изменится на то, как показано ниже в теле

public static void main(String[] args) throws Exception { 
    Connection connection = null; 
    try { 
     Class.forName("com.ibm.db2.jcc.DB2Driver"); 
    } catch (ClassNotFoundException ex) { 
     ex.printStackTrace(); 
    } 
    try { 
     System.out.println(); 
     connection = DriverManager.getConnection("jdbc:db2://localhost:port/database", username, password); 
     connection = DriverManager.getConnection("jdbc:db2://localhost:port/database", username, password); 
     connection.setAutoCommit(false); 
     String plsql = "UPDATE AR01.REBILL_PROPERTIES SET PROPERTY_VALUE='test6' where property_name='TEST'"; 
     PreparedStatement pstatement = connection.prepareStatement(plsql); 
     pstatement.executeUpdate(); 
     connection.commit(); 
    } catch (SQLException ex) { 
     connection.rollback(); 
     ex.printStackTrace(); 
    } 
} 

Надеется, что это помогает.

Смежные вопросы