Du uppger att du kör batcher av SQL-satser så jag antar att du använder executeBatch
. När du exekverarBatch
en sats av påståenden, kan några av påståendena lyckas och några av påståendena kan misslyckas. Om en sats misslyckas betyder det inte att JDBC-drivrutinen rullar tillbaka de satser som lyckades. JDBC-drivrutinen kan välja att försöka köra alla satser i satsen om en sats misslyckas eller den kan välja att sluta köra satser i satsen när en sats misslyckas (det låter som att drivrutinen du använder väljer att sluta köra satser som så snart det är ett misslyckande).
När en sats i en batch misslyckas bör du få en BatchUpdateException
. I din undantagshanterare måste du anropa getUpdateCounts
. Det ger dig en array av int
som talar om för dig antingen hur många rader uttalandet uppdaterade, ett Statement.SUCCESS_NO_INFO
som indikerar att satsen lyckades men inget radantal var tillgängligt, eller ett Statement.EXECUTE_FAILED
vilket tyder på att uttalandet misslyckades. Om de första 99 satserna lyckas, den 100:e satsen genererar ett fel och de återstående satserna inte exekveras, bör du få tillbaka en array med 100 element där de första 99 elementen indikerar framgång och det 100:e elementet indikerar Statement.EXECUTE_FAILED . Din kod skulle då behöva försöka igen de satser som inte kördes (i det här fallet satser 101-1000).