Используя JDBC (Oracle), мне нужно вставить тысячи строк в три разные таблицы. В принципе, я хочу выполнить три вставки SQL-оператора один за другим в цикле.Spring JDBC - Массовая вставка, ориентированная на несколько таблиц
Я прочитал this link, и я хотел бы знать, какая реализация лучше (с точки зрения времени выполнения):
- Execute первый оператор SQL в пакете и извлекаемых сгенерированные ключи
- Выполнить второй заявление SQL, используя сгенерированные ключи от стадии 1 в пакете и получить новые сгенерированные ключи
- Exercute третьего оператора SQL с использованием как сгенерированные ключи от стадии 1 и 2
Или зацикливание каждой записи для вставки и для каждой записи, выполняющей три оператора SQL один за другим.
Я знаю, что первая реализация зависит от базы данных (поскольку ResultSet.getGeneratedKeys()
не поддерживается каждой базой данных). Может быть, есть третье воплощение, о котором я не думал?
Я хочу использовать одно соединение, поэтому для обеих реализации я бы сначала получил соединение, сделаю каждую вставку и, наконец, зафиксирую и закрою соединение.
Кроме того, мне интересно, могу ли я использовать любую абстракцию Spring JDBC. Вторая реализация представляется возможной с помощью Spring JdbcTemplace (обертывание метода с помощью @Transactional
для использования того же соединения), но первое выглядит сложным, поскольку метод batchUpdate из JdbcTemplate не возвращает сгенерированные ключи.