дана бд с таблицей
create table entry (field Long)
после подключения к бд необходимо сгенерировать данные в базу от 1 до скажем 1000000
for (int i = 0; i < n; i++) {
try (PreparedStatement st = conn.prepareStatement("INSERT INTO entry VALUES (?)")) {
st.setInt(1, 1 + i);
st.executeUpdate();
и вот такая генерация работает очень медленно я добавил строчку System.out.println(i); и долго наблюдаю в консоле 4103 4104 4105 4106 4107
пока писал вопрос дошло только до сюда можно как-то ускорить процесс?
Есть несколько способов решить эту проблему.
Начать транзакцию до цикла и зафиксировать после
conn.setAutoCommit(false);
for (int i = 0; i < n; i++) {
...
}
conn.commit();
Использовать пакетные операции
try (PreparedStatement st = conn.prepareStatement("INSERT INTO entry VALUES (?)")) {
for (int i = 0; i < n; i++) {
st.setInt(1, 1 + i);
st.addBatch();
}
st.executeBatch();
}
Сгенерировать данные не в java-коде, а SQL-запросом
insert into entry select * from generate_series(0, 1000000, 1);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости