Как преобразовать строку оператора подготовки sql с объектом в точную строку sql? - PullRequest
2 голосов
/ 09 июля 2020

Я использую пружину. У меня много шагов по обновлению. Есть ли способ использовать для этого batchUpdate?

Исходный

jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});  
jdbcTemplate.update("UPDATE USER2 SET name = ? WHERE user_id = ?", new Object[] {name, id2});  
jdbcTemplate.update("UPDATE USER3 SET name = ? WHERE user_id = ?", new Object[] {name, id3});  

Как использовать batchUpdate

getJdbcTemplate().batchUpdate(sql);

Потому что параметр для batchUpdate равен Array[]. Как преобразовать строку оператора подготовки SQL с объектом в точную строку SQL?

1 Ответ

3 голосов
/ 10 июля 2020

int\[\] batchUpdate(String... sql) - неправильный метод для работы. Он предназначен для случая, когда у вас есть несколько разных SQL операторов без параметров, которые вы хотите выполнить в одном go.

Вам нужно использовать один из других batchUpdate методов.

Если вам не нужно контролировать размер пакета, public int[] batchUpdate(String sql, List<Object[]> batchArgs) должно работать нормально. Вызов будет выглядеть следующим образом:

jdbcTemplate.update(
    "UPDATE USER SET name = ? WHERE user_id = ?", 
    Arrays.asList(
        new Object[] {name, id},
        new Object[] {name, id2}, 
        new Object[] {name, id3}
    )
); 

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

См. также этот пример .

...