2013-11-11 2 views
0

Я практикую JDBC пакетную обработку и содержащие ошибки:Пакетная обработка JDBC

ошибки 1: неподдерживаемый функция Ошибка 2: Выполнить не может быть пустым или нулевым

Property files include: 
itemsdao.updateBookName = Update Books set bookname = ? where books.id = ? 
itemsdao.updateAuthorName = Update books set authorname = ? where books.id = ? 

Я знаю, что могу выполнить около заявления DML в одном обновлении, но я занимаюсь пакетной обработкой в ​​JDBC.

Ниже мой метод

public void update(Item item) { 
      String query = null; 

     try { 
      connection = DbConnector.getConnection(); 
      property = SqlPropertiesLoader.getProperties("dml.properties"); 
      connection.setAutoCommit(false); 

      if (property == null) 
      { 
       Logging.log.debug("dml.properties does not exist. Check property loader or file name is spelled right"); 
       return; 
      } 

      query = property.getProperty("itemsdao.updateBookName"); 
      statement = connection.prepareStatement(query); 
      statement.setString(1, item.getBookName()); 
      statement.setInt(2, item.getId()); 
      statement.addBatch(query); 

      query = property.getProperty("itemsdao.updateAuthorName"); 
      statement = connection.prepareStatement(query); 
      statement.setString(1, item.getAuthorName()); 
      statement.setInt(2, item.getId()); 
      statement.addBatch(query); 

      statement.executeBatch(); 
      connection.commit(); 

     }catch (ClassNotFoundException e) { 
      Logging.log.error("Connection class does not exist", e); 
     } 
     catch (SQLException e) { 
      Logging.log.error("Violating PK constraint",e); 
     } 

     //helper class th 
     finally { 

      DbUtil.close(connection); 
      DbUtil.closePreparedStatement(statement); 

     } 
+0

Вы отправили всю ошибку? –

+0

поддерживает ли ваш jdbc драйвер/поддержка базы данных? – BevynQ

+0

Вы хотите 'statement.addBatch()', а не 'statement.addBatch (query)'? – Glenn

ответ

2

Вы смешении методы Statement и PreparedStatement классы:

  • (addBatch(String sql) принадлежит Statement и нельзя назвать на PreparedStatement или CallableStatement

  • addBatch() должен использоваться с PreparedStatement (как показывает ваш учебник).

Oracle реализует как это собственные и стандарт (JDBC 2.0) пакетной обработки. Из Standard Update Batching docs:

В приложениях Oracle JDBC, обновление пакетирование предназначено для использования с подготовленными заявлениями, которые обрабатываются многократно с различными наборами значений связывания.

+0

Я попробовал addBatch без параметра, и я получил инструкцию SQL для выполнения не может быть пустой или пустой ошибкой. –

+0

К сожалению ... Я нашел свою ошибку. В моем файле свойств есть опечатка. –

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