Как заставить Preparedstatement.executeBatch() работать с хорошими записями, если одна запись не вставляется

В моем Java-коде у меня есть подготовленный оператор ps_temp.

PreparedStatement ps_temp;

// loop

ps_temp.setString(1,'abc');
....
....
ps_temp.addBatch();

// end loop

ps_temp.executeBatch();

Теперь одна из записей в пакете создала ограничение уникального индекса, что в конечном итоге привело к сбою всего ps_temp.executeBatch(). Даже хорошие записи в пакете не вставляются в таблицу.

Итак, возможно ли, что если в моей партии есть хорошие и плохие записи (что может привести к ограничению целостности), ТО ПО КРАЙНЕЙ МЕРЕ ХОРОШИЕ ЗАПИСИ ВСТАВЛЯЮТСЯ В ТАБЛИЦУ?

Заранее спасибо !! Номан


person Noman K    schedule 13.05.2014    source источник
comment
Возможный дубликат stackoverflow.com/questions/4724957 /   -  person Alexandre FILLATRE    schedule 13.05.2014


Ответы (1)


Довольно часто пакет записей содержит несколько плохих. Если вы попытаетесь вставить все записи за один раз, и одна запись не удастся, все вставки будут отклонены. Это ожидаемо и является основной целью «обработки транзакций».

Обычно для пакетной вставки можно использовать два подхода:

1) Фиксировать после каждой вставки записи --> Процесс с высокой производительностью.

2) Разделите общие записи на более мелкие «фрагменты» и вставьте в базу данных. Так что только кусок, содержащий плохую запись, не будет работать, а другие куски будут вставлены в базу данных.

В качестве альтернативы, если вы не хотите заниматься этими вещами самостоятельно, выберите фреймворк. Весенняя партия

Может быть одним из ваших вариантов в этом случае

person Hirak    schedule 13.05.2014