sql >> Databasteknik >  >> RDS >> Oracle

JDBC Batch insert undantagshantering

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).



  1. Fortsätter Infogar i Oracle när undantag höjs

  2. pip-installationen misslyckas med /usr/bin/clang:Ingen sådan fil eller katalog

  3. använd en variabel för tabellnamn i mysql sproc

  4. Hur man använder förberedda uttalanden med Postgres