2016-11-09 3 views
0

Я использую Spring jdbcTemplate для моего слоя DAO. И я, по крайней мере, два SQL заявления, что я хочу, чтобы выполнить в одном запросе, чтобы сразу попасть в базу данных:jdbcTemplate выполнить несколько операторов sql в одной партии

String INSERT_SQL = "INSERT INTO \"ADDRESS\" (id_registred_user, " 
              + "address, " 
              + "city, " 
              + "region, " 
              + "country) " 
              + "VALUES (?, ?, ?, ?, ?)"; 

String UPDATE_SQL = "UPDATE \"REGISTRED_USER\" SET id_address = ? " 
        + "WHERE id_registred_user = ?"; 

На данный момент я делаю это внутри @Transactional:

jdbcTemplate.update(INSERT_SQL, args...); 
jdbcTemplate.update(UPDATE_SQL, args...); 

Я знаю, что в простом jdbc есть метод addBatch(), но как я могу выполнить эти два оператора sql в одной партии с помощью jdbcTemplate? Есть ли эквивалент addBatch() в jdbcTemplate?

Заранее спасибо.

+0

Возможный дубликат [с использованием Spring JdbcTemplate для нескольких операций с базой данных] (http://stackoverflow.com/questions/2564128/using-spring-jdbctemplate-for-multiple-database-operations) – pleft

+0

@pleft Его вопрос не о нескольких базах данных, что я могу сказать. –

+0

@TimBiegeleisen ссылка, которую я предоставил, касается «как вы выполняете несколько SQL-запросов в одном соединении?» – pleft

ответ

4

Вы можете объединить оба запроса и добавить ; в качестве разделителя, но это не сделает эти запросы «атомарными». Другими словами, они не будут выполняться сразу, как вы думаете, но один за другим, точно так же, как вы бы выполнили 2 шаблона один за другим - здесь никакой разницы.

Чтобы гарантировать функционирование атомарности, вы должны использовать транзакции. Транзакции могут делать все изменения, сделанные запросами, сразу же при совершении транзакции.

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