sql >> Databasteknik >  >> RDS >> Oracle

ExecuteBatch-metoden returnerar array med värdet -2 i java

jdbc-specifikationen har följande att säga om returkoden för batchuppdateringar:

■ 0 eller högre — kommandot bearbetades framgångsrikt och värdet är ett antal uppdateringar som anger antalet rader i databasen som påverkades av kommandots exekvering. Kapitel 14 Batchuppdateringar 121

■ Statement.SUCCESS_NO_INFO — kommandot bearbetades framgångsrikt, men antalet berörda rader är okänt

Statement.SUCCESS_NO_INFO definieras som -2, så ditt resultat säger att allt fungerade bra, men du kommer inte att få information om antalet uppdaterade kolumner.

Oracle-dokumentationen säger:

•För en förberedd satssats är det inte möjligt att veta hur många rader som påverkas i databasen av varje enskild sats i partiet. Därför har alla arrayelement värdet -2. Enligt JDBC 2.0-specifikationen indikerar ett värde på -2 att operationen lyckades men antalet rader som påverkas är okänt.

•För en generisk satssats innehåller arrayen det faktiska uppdateringsantalet som anger antalet rader som påverkas av varje operation. Det faktiska antalet uppdateringar kan endast tillhandahållas i fallet med generiska uttalanden i Oracle-implementeringen av standardbatchning.

•För en anropsbar satssats returnerar servern alltid värdet 1 som uppdateringsantal, oavsett antalet rader som påverkas av varje operation.

Så det verkar som om du behöver uppdateringsantalet du inte kan använda PreparedStatement s men måste falla tillbaka till vanligt Statement s.



  1. ORA-03113:slutet av filen på kommunikationskanalen

  2. MySQL kontra PDO

  3. Hur gör man två frågor med vanliga kolumner (A, B) och (A, C) till bara en (A, B, C)?

  4. Inte alla parametrar användes i SQL-satsen (Python, MySQL)