Вие заявявате, че изпълнявате партиди от SQL оператори, така че предполагам, че използвате executeBatch
. Когато executeBatch
партида от изявления, някои от изявленията може да са успешни, а някои от изявленията могат да се провалят. Ако едно изявление е неуспешно, това не означава, че JDBC драйверът връща назад успешните оператори. JDBC драйверът може да избере да се опита да изпълни всички оператори в пакета, ако един оператор не успее, или може да избере да спре изпълнението на оператори в пакета, след като даден израз се провали (звучи, че драйверът, който използвате, избира да спре изпълнението на оператори като веднага щом има повреда).
Когато едно изявление в групата се провали, трябва да получите BatchUpdateException
. Във вашия манипулатор на изключения трябва да извикате getUpdateCounts
. Това ще ви даде масив от int
което ви казва или колко реда е актуализирано изявлението, Изявление.SUCCESS_NO_INFO
което показва, че операторът е успешен, но няма наличен брой редове, или Statement.EXECUTE_FAILED
което показва, че изявлението е неуспешно. Ако първите 99 оператора са успешни, 100-ият израз генерира грешка, а останалите оператори не се изпълняват, трябва да получите обратно масив от 100 елемента, където първите 99 елемента показват успех, а 100-ият елемент показва Statement.EXECUTE_FAILEDкод> . След това кодът ви ще трябва да опита отново тези оператори, които не са били изпълнени (в този случай, оператори 101-1000).