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 :

Gérer une transaction


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Par défaut Gérer une transaction
    Bonsoir,
    Voilà j'ai une classe Java dans laquelle j'ai des requêtes INSERT comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    private String url;
    private String pilote;
    public Connection con;
    private Statement statement;
    private ResultSet resultSet;
    private String username;
    private String userpwd;
     
    // Création de la connexion
    Class.forName("com.ibm.db2.jcc.DB2Driver");
    con = DriverManager.getConnection("jdbc:db2://10.10.10.165:50000/GAINDE15", "db2admin", "db2admin");
    statement = con.createStatement();
     
    // On exécute une requête d'insertion
    statement.execute(requete1);
     
    // On exécute une deuxième requête d'insertion
    statement.execute(requete2);
     
    con.close();
    Mon problème est le suivant. Je veux annuler l'insertion 1 si l'insertion 2 ne marche pas. Je sais comment trapper l'exception (-803) qui me signale une erreur d'intégrité lors de l'exécution de la deuxième requête (équivalent à DuplicateKeyException). Cependant je ne sais pas comment annuler l'insertion de la première requête... Pouvez-vous m'aider? merci

  2. #2
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Tu peux voir du côté de l'interface Savepoint qui te permet de déclarer une sorte de marqueur et d'y revenir par la suite grâce à un rollback... C'est expliqué dans la javadoc.

  3. #3
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Bon, il est 1h15, je sors d'un resto arrosé mais...sauf erreur la gestion de point de sauvegarde est inutile dans cette exemple ?

    Il suffit d'utiliser commit et rollback de de java.sql.Connection

    L'insert 1 se passe mal on rollboack, se passe bien, on continue avec le 2eme, ça se passe mal on rollback le tout dans le catch de l'exception, et sinon on commit le tout.

    Ne pas oublier de désactiver (vérifier) un potentiel commit automatique sur la connexion.

    C'est bien ça ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Par défaut
    Salut j'ai essayé la méthode d'Elitost, sans succés. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    try {
       ...
     
       // On exécute une requête d'insertion
       statement.execute(requete1);
     
       ...
     
       // On exécute une deuxième requête d'insertion
       statement.execute(requete2);
     
      ...
     
      con.commit();
    }catch SQLException e) {
       conn.con.rollback();
    }
    Mais il m'insère à chaque fois l'élément de la requête 1...

  5. #5
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Sûrement parce que le commit est automatique, insère ce code avant toutes insertions :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    con.setAutoCommit(false);

    Regarde également ce post :
    http://www.developpez.net/forums/showthread.php?t=44951

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Par défaut
    Vouiiii!!!
    Nickel maintenant ça marche...
    Je pense que je vais mettre un autoCommit(false) à chacune de mes transactions maintenant

    Merci elitost

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/03/2008, 10h49
  2. [SGBD]Evaluation du temps d'une transaction
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 26/10/2004, 17h53
  3. Gérer une barre d'outils
    Par Jean Claude BOULET dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2004, 22h54
  4. Utilisation d'une transaction
    Par Bernard M dans le forum Bases de données
    Réponses: 6
    Dernier message: 21/04/2004, 23h31
  5. [ODBC][WINDOWS] gérer une base via ODBC
    Par narmataru dans le forum Windows
    Réponses: 2
    Dernier message: 19/12/2003, 13h36

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