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 :

Problème de batch


Sujet :

JDBC Java

  1. #1
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Problème de batch
    Bonjour, j'essaye de mettre en place un batch, mais je me heutre à des problèmes : ca ne marche pas (les données ne sont pas écrites dans la base)

    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
    22
    23
    24
    25
    26
    27
    28
    try{
                query = "INSERT INTO SCHEMA.CHANGES VALUES ('";
                query += ...
                              s.addBatch(query);
     
                              query = "INSERT INTO SCHEMA.CABLES VALUES ('";
                query += ...
                              s.addBatch(query);
                while(i<datas.current_nombre_cables){
                   query = "SELECT NOMBRE_PLUGS FROM SCHEMA.OBJETS
                   query += ...
                   resultat = s.executeQuery(query);
                            while(resultat.next()){
                    ...                
                                  }
                   if(cond){
                        query = "UPDATE DONNADIEU.OBJETS
                        query += ...                                                           s.addBatch(query);
                   }
     
                }
            s.executeBatch();
            s.clearBatch();
     
            }
            catch(SQLException e){
                System.out.println(e.toString());
            }}
    pourquoi ça ne marche pas? ça vient peut être des resquetes qui ne sont effectuées par batch en plein milieu. COmmen solutioner le problème svp, merci

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Question bête mais ... tu fais bien un commit quelque part ?

  3. #3
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut non
    j'en fais pas, mais ca marche bien si je mets pas toutes les requetes SELECT, c'est bizare.

    Si je mets setAutoCommit(false);
    + commit();
    c'est bon?

    mais il faut que je le fasse aussi pour les requetes qui ne pasent par par le batch??

    J'ai des dépendances, LES UPDATES si le SELECT pas fait, va planter...

  4. #4
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par donnadieujulien Voir le message
    j'en fais pas, mais ca marche bien si je mets pas toutes les requetes SELECT, c'est bizare.
    tu veux dire que si tu ne fais pas de SELECT tout est bon ?

    Citation Envoyé par donnadieujulien Voir le message
    Si je mets setAutoCommit(false);
    + commit();
    c'est bon?
    oui c'est bon

    Citation Envoyé par donnadieujulien Voir le message
    mais il faut que je le fasse aussi pour les requetes qui ne pasent par par le batch??

    J'ai des dépendances, LES UPDATES si le SELECT pas fait, va planter...
    euh ... là j'avoue que je n'arrive pas à te suivre ...

    De manière générale INSERT, UPDATE et DELETE doivent être "commités" pour que les changements effectués dans ta session soient visibles ailleurs ...

    [EDIT] tu passes par des PreparedStatement ? Si oui pourquoi n'utilises tu pas les '?' à la place de construire tes requêtes à la mano ?

    [EDIT2]
    en fait quand tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat = s.executeQuery(query);
    je me demande si tu ne perds pas tout ce que tu as mis dans le batch avant ...
    Tu devrais utiliser un autre statement pour faire ton select ... ou alors faire le executeBatch avant de faire les select ...

  5. #5
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Ce que je pense avoir compris
    En fait, jai l'impression que les batchs ne servent que pour les requetes qui ne se servent pas de resultSet. Vrai?

    Commit en DB2 pur, renvoie l'état de la requète, si tout c'est bien passé ou pas. En java, commit est "void", donc ne signifie pas la même chose. Vrai? Qu'est ce que ca signifie?

    Mon code dans les grandes lignes :

    [con.setAutoCommit(false);
    query = "INSERT.......";
    s.addBatch(query);
    query = "SELECT.......";
    res = s.executeQuery(query);
    con.commit();
    while(res.next()){
    ...
    }
    query = "UPDATE...";
    s.addBatch(query);
    s.executeBatch();
    con.commit();
    s.clearBatch();]

    Ca ne marche pas, pourquoi?

    Merci

  6. #6
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Nikel
    Avec un deuxième statement s_batch, utilisé juste pour les batchs, ça marche à merveille, merci in

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

Discussions similaires

  1. Problème de batch build Code::Blocks sous Debian 5.03
    Par cgigot dans le forum Code::Blocks
    Réponses: 0
    Dernier message: 11/02/2010, 14h37
  2. Problèmes en Batch
    Par XmichouX dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 31/07/2008, 21h43
  3. Problème de batch avec Cron.exe
    Par jpberub dans le forum Windows
    Réponses: 1
    Dernier message: 25/07/2007, 21h08
  4. Petit problème de batch
    Par clarkk dans le forum Windows
    Réponses: 17
    Dernier message: 23/08/2006, 10h21
  5. Réponses: 6
    Dernier message: 28/09/2005, 10h24

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