2016-03-09 2 views
0

Я хочу обновить несколько строк с помощью JDBCTemplate с фиксированными значениями, используя только один оператор. Моя функция получает список идентификаторов, и я использую Joiner Guava, чтобы объединить их в одну строку. Когда я пытаюсь вызвать функцию обновления JDBCTemplate, используя объединенные идентификаторы в качестве параметра, он обновляет только первый элемент, как-то где-то, в конечном запросе вводится «Предел 1».Spring JDBCTemplate обновляет несколько строк

private int increase(final List<Long> ids){ 
    String query = "UPDATE mytable" + 
        " SET count = count + 1," + 
        "  last_modified = NOW()" + 
        " WHERE id IN (?)"; 
    Object[] args = {Joiner.on(",").join(ids)}; 
    return jdbcTemplate.update(query, args); 
} 

В коде есть что-то неправильное? Использую ли я неправильный метод? Это ошибка в библиотеке? Должен ли я просто конкатенировать идентификаторы в запросе и не отправлять их в качестве аргумента?

ответ

0

Ниже приводится способ сделать это весной.

Использование JdbcTemplate

batchUpdate (String SQL, BatchPreparedStatementSetter PSS)

private void increase(List<Long> ids){ 
    String query = "UPDATE mytable" + 
       " SET count = count + 1," + 
       "  last_modified = NOW()" + 
       " WHERE id = ?"; 
    getJdbcTemplate().batchUpdate(query,new BatchPreparedStatementSetter() { 

      @Override 
      public void setValues(PreparedStatement ps, int i) throws SQLException { 
       ps.setLong(1, ids.get(i)); 
      } 

      @Override 
      public int getBatchSize() { 
       return ids.size(); 
      } 
     }); 

} 

Проверить this post и посмотреть, если он делает вещи яснее для вас.

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