Есть много одинаковых запросов insert, и для ускорения выполнения этих процессов, я хочу использовать statement.executeBatch();
вот часть кода:
public void executeRequest() {
try {
statement.executeBatch();
connection.commit();
} catch ( SQLException e) {
log.error(e.getMessage());
}
}
public void addBatch(String request){
try {
statement.addBatch(request);
} catch (SQLException e) {
log.error(e.getMessage());
log.error("\n\n"+request);
}
}
Но в результате получаю ошибку:
2018-11-06 10:13:49 ERROR SettingDataBase:39 - Batch entry 295 was aborted: Возвращено слишком много результатов обновления. Call getNextException to see other errors in the batch.
На сколько я знаю, batch ограничен только размером памяти. В чем может быть проблема и как ее исправить?
Пример записи в batch:
INSERT INTO "C_Parameters" ("DefaultValue", "DeletionMark", "Ref", "Description", "ValueType", "Code")
VALUES ('<?xml version="1.0" encoding="UTF-8"?><Value><Type>Catalog.дом</Type><Data>00000000-0000-0000-0000-000000000000</Data></Value>', 'false', '15a4242d-adf9-4cef-8e40-ce1d64e2dde2', 'Обслуговує агент', 'eJxdUL0KwoDCGNzjw==', '000000023')
ON CONFLICT ("Ref") DO UPDATE SET
"DefaultValue" = '<?xml version="1.0" encoding="UTF-8"?><Value><Type>Catalog.дам</Type><Data>00000000-0000-0000-0000-000000000000</Data></Value>',
"DeletionMark" = 'false',
"Ref" = '14a3242d-adf4-4cef-8e40-ce4d64e2dde2',
"Description" = 'Тест',
"ValueType" = 'eJxdUL0KwjAQ3n2KKBNd6pxL==',
"Code" = '000000023';
C Batch
все таки обычно работают по другому, а именно:
PreparedStatement
PreparedStatement
и добавляем addBatch()
executeBatch()
Примерно так:
PreparedStatement preparedStatement;
String compiledQuery = "INSERT INTO TESTDB.EMPLOYEE(EMPNO, EMPNM, DEPT, RANK, USERNAME)" +
" VALUES" + "(?, ?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(compiledQuery);
for(int index = 1; index <= records; index++) {
preparedStatement.setInt(1, index);
preparedStatement.setString(2, "empo number-"+index);
preparedStatement.setInt(3, index+100);
preparedStatement.setInt(4, index+200);
preparedStatement.setString(5, "usernames");
preparedStatement.addBatch();
}
int[] inserted = preparedStatement.executeBatch();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Я новичок в java программировании и совсем недавно начал изучать javaПростые вещи на java понятны (такие как создание классов, условия, циклы, коллекции,...
Необходимо реализовать метод с использованием обобщенных параметров типа, который в качестве аргумента будет принимать массив и выводить...
Использую SearchView и стандартный адаптер ArrayAdapter, с помощью adaptergetFilter()