web-dev-qa-db-fra.com

Comportement autoCommit par défaut de la connexion JDBC

Je travaille avec JDBC pour me connecter à Oracle. J'ai testé connection.setAutoCommit(false) vs connection.setAutoCommit(true) et les résultats étaient comme prévu.

Alors que par défaut, la connexion est censée fonctionner comme si autoCommit(true) [corrigez-moi si je me trompe], mais aucun des enregistrements n'est inséré jusqu'à ce que connection.commit() soit appelé. Un conseil concernant le comportement par défaut?

String insert = "INSERT INTO MONITOR (number, name,value) VALUES (?,?,?)";

conn = connection; //connection  details avoided
preparedStmtInsert = conn.prepareStatement(insert);
preparedStmtInsert.execute();

conn.commit();
23
stackex

De documentation Oracle JDBC :

Lorsqu'une connexion est créée, elle est en mode de validation automatique. Cela signifie que chaque instruction SQL individuelle est traitée comme une transaction et est automatiquement validée juste après son exécution. (Pour être plus précis, par défaut, une instruction SQL est validée lorsqu'elle est terminée, et non lorsqu'elle est exécutée. Une instruction est terminée lorsque tous ses jeux de résultats et nombres de mises à jour ont été récupéré . Dans presque tous les cas, cependant, une instruction est terminée, et donc validée, juste après son exécution.)

L'autre chose est - vous avez omis les détails de création de connexion, donc je suppose juste - si vous utilisez certains frameworks, ou acquérez une connexion à partir d'une source de données ou d'un pool de connexions, le autocommit peut être tourné off par ces frameworks/pools/sources de données - la solution est de ne jamais faire confiance aux paramètres par défaut ;-)

31
npe