У меня есть приложение java с базой данных базы данных Oracle, в которое мне нужно вставить несколько строк. Я видел дискуссию о вставке нескольких строк в Oracle, но меня также интересует, как влияет производительность на JDBC в броске в миксе.
Я вижу несколько возможностей:
Вариант 1: Используйте однострочную вставку PreparedStatement и выполните ее несколько раз:
String insert = "Insert into foo(bar, baz) values (?, ?)";
PreparedStatement stmt = conn.prepareStatement(insert);
for(MyObject obj : someList) {
stmt.setString(1, obj.getBar());
stmt.setString(2, obj.getBaz());
stmt.execute();
}
Вариант 2: Создайте инструкцию Oracle INSERT ALL:
String insert = "INSERT ALL " +
"INTO foo(bar, baz), (?, ?) " +
"INTO foo(bar, baz), (?, ?) " +
"SELECT * FROM DUAL";
PreparedStatement stmt = conn.prepareStatement(insert);
int i=1;
for(MyObject obj : someList) {
stmt.setString(i++, obj.getBar());
stmt.setString(i++, obj.getBaz());
}
stmt.execute();
Вариант 3: Используйте функцию addBatch для PreparedStatement:
String insert = "Insert into foo(bar, baz) values (?, ?)";
PreparedStatement stmt = conn.prepareStatement(insert);
for(MyObject obj : someList) {
stmt.setString(1, obj.getBar());
stmt.setString(2, obj.getBaz());
stmt.addBatch();
}
stmt.execute();
Я предполагаю, что еще одна возможность - создать CSV файл и использовать SQL Loader, но я не уверен, что это будет действительно быстрее, если вы добавите дополнительные накладные расходы на создание файла CSV...
Итак, какой вариант выполнил бы самый быстрый?