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 :

Paramètre connection.setAutoCommit(false) ignoré


Sujet :

JDBC Java

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Paramètre connection.setAutoCommit(false) ignoré
    Bonjour,

    J'ai une simple application Java et je souhaiterais créer une transaction pour insérer plusieurs données dans une BDD.
    Le problème est que chaque requête est exécutée séparément, comme si l'AutoCommit était à true.

    Voila un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Class.forName ("com.mysql.jdbc.Driver").newInstance ();
    Connection conn = DriverManager.getConnection (url, username, password);
     
    conn.setAutoCommit(false);
    //conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
    // - cette ligne commente ne fait pas l'affaire non plus
     
    Statement s = conn.createStatement();
    s.executeUpdate( "UPDATE sequences set id="+newNid+" where name=\"node_nid\"";);
    conn.rollback();
    conn.close();
    Voila, je m'attendais à ce que la table ne soit pas modifiée après ce code, puisque je ne fais pas de commit, mais un rollback. Et pourtant, ça modifie bien la BDD.

    J'utilise MYSQL 5 (celle qui vient avec Wamp Server) et le driver mysql-connector-java-3.0.17 récupéré sur le site de MySQL.

    Quelqu'un saurait-il m'expliquer comment faire pour éviter le commit ?

    Merci d'avance pour votre aide.

  2. #2
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    salut je suis pas un dieu mais le commit s'utilise de paire avec le rollback pour valider / invalider tes modifs, le tout bien avec sûr un setautocommit à false bien sûr.
    par défaut il est à true qd tu crées ta connection, donc tout ce que tu utilises est immediatly impacted sur la base.
    le connection.setAutoCommit(false) est souvent utilisé avec un preparestatement/executeupdate/connection.commit
    hope this helps...

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Ça ne vient pas de ton code, il est correct...

    Je ne serais pas surpris que tu utilises une base MyISAM (qui ne supporte pas les transactions) à la place d'une InnoDB...

    Peux-tu vérifier ?

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut merci
    Citation Envoyé par OButterlin Voir le message
    Ça ne vient pas de ton code, il est correct...

    Je ne serais pas surpris que tu utilises une base MyISAM (qui ne supporte pas les transactions) à la place d'une InnoDB...

    Peux-tu vérifier ?
    merci beaucoup, c'est tout a fait vrai. Le strorage engine par default de MySql est MyISAM. Il suffit de le changer en InnoDB pour que ca marche.

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Si quelqu'un a besoin ...
    Pour changer l'engine pour une ou plusieurs tables (par exemple, j'ai besoin de le faire comme ça parce que je ne suis pas admin sur la BDD que j'utilise, je n'ai donc accès qu'a mes propres tables.):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `myDatabaseName`.`myTable` ENGINE = InnoDB;

  6. #6
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 47
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Je voulais te dire que ton post m'a aidé car j'avais le même problème.
    Donc merci beaucoup.

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

Discussions similaires

  1. Paramètre d'un SqlDataSource ignoré
    Par Juju54350 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/03/2013, 09h08
  2. SQL Server CE 3.5 setAutoCommit(false)
    Par sunlover dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2011, 01h13
  3. Paramétrer connection JBOSS sqlserver dans code java
    Par g25452 dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 19/03/2009, 11h31
  4. Réponses: 2
    Dernier message: 29/09/2007, 13h56

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