Non è proprio così.. o almeno non è molto chiaro.. se un inserimento genera una eccezione, viene eseguito il rollback, che ripristina il database allo stato dell'ultimo commit eseguito. Ma visto che il commit viene richiesto ad ogni operazione, l'unica operazione che viene influenzata è proprio l'inserimento.Se la commit non va a buon fine la rollback annulla l'ultima operazione fatta, che non è la commit di insert o quella che ha generato l'errore, ma quella precedente, rilasciando il db e rimuovendo qualsiasi blocco sul db.
Questo è quanto sta scritto sulle api. Quindi tutta questa faccenda mi sembra strana.. Non dovrebbe essere necessario chiamare il commit dopo ogni inserimento.. BohBy default, new connections are in auto-commit mode.