IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[JDBC]Auto Commit Implicite (vicieux?)


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 23
    Points : 20
    Points
    20
    Par défaut [Résolu] [JDBC]Auto Commit Implicite (vicieux?)
    Bonjour à tous,

    Mon problème concerne JDBC et le "commit" plus particulièrement.

    Je désactive la fonction auto-commit juste après la création de la connection mais cela ne l'empeche pas de commiter tout ce que je fais...

    C'est sans doute une erreur con mais je n'arrive pas à la résoudre.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    String url = "*********"; 
    String user = "***************";
    String password = "****";
    Connection connection=DriverManager.getConnection(url,user, password);
    connection.setAutoCommit(false);
    Statement statement=connection.createStatement();
    statement.executeUpdate("delete from MATABLE");
    statement.close();
    connection.close();
    Et meme si l'auto commit est positionné à false, lorsque je lance ce programme et qu'il y a quelquechose dans MATABLE, à la fin de l'execution, il n'y a plus rien dans MATABLE...

    Si quelqu'un voit la solution à ce délicat problème, merci de répondre


  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Je pense que si tu ne fais pas de rollback() ou de commit(), il doit y avoir un commit() implicite qui est fait lors de la fermeture de la connection ou du statement...

    Essaye de rajouter un rollback() avant de fermer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    connection.roolback();
     
    statement.close();
    connection.close();
    a++

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Salut,

    Merci pour la réponse rapide, et... qui marche effectivement, quand on mets le rollback avant le close, ca ferme sans enregistrer les modifs. Logique.

    Par contre, ce qui me gene un peu plus, c'est que la fonction commit() soit appelée au moment ou on appelle la fonction close() sur la connection.

    C'est un petit peu n'importe quoi surtout que ce n'est indiqué nul part...

    M'enfin...

    Si des gens peuvent réagir la dessus, peut etre que j'ai manqué quelque chose. Ca le fait à tout le monde? ou alors c'est marqué quelque part et j'ai mal lu?

    (pour que les gens continuent à répondre, je ne rajoute pas encore le [résolu].

    Merci à toi encore adiGuba

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Always commit or roll back any pending changes before closing the connection. Whether there would be an implicit COMMIT operation as the connection is closed is not specified in the JDBC standard and may vary from vendor to vendor. For Oracle, there is an implicit COMMIT when a connection is closed, and an implicit ROLLBACK when a connection is garbage-collected without being closed, but it is not advisable to rely on these mechanisms.
    c'est surtout le
    operation as the connection is closed is not specified in the JDBC standard and may vary from vendor to vendor
    qu'il faut noter

    source : http://www.lc.leidenuniv.nl/awcourse/oracle/java.920/a96655/keyprog.htm

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    OK, cette fois on peut clore le débat.
    Merci à vous deux, c'est très sympa de votre part.

    Cordialement,

    Julien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 30/10/2006, 15h44
  2. auto commit ou est tu ?
    Par dev7 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 24/01/2006, 10h01
  3. Réponses: 5
    Dernier message: 24/08/2005, 12h21
  4. [jdbc][oracle] conversion implicite erronée
    Par Jack Huser dans le forum JDBC
    Réponses: 2
    Dernier message: 30/06/2005, 11h23
  5. Mode auto commit
    Par Limod dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 02/11/2004, 23h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo