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 :

mise à jour de tables


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut mise à jour de tables
    Bonjour, je suis actuellement en stage, et on m'a demandé de concevoir un connecteur entre 2 bases de données.En ce moment j'essai de concevoir une methode de mise à jour, c'est-à-dire, qu'il ya une base(entrepot) possédant toutes les tables des autres bases, et que cette base doit être mise à jour quand on modifie une des tables des autres bases. Si quelqu'un pouvait m'aider je lui en serait reconnaissant.Ainsi j'aimerais pouvoir mettre à jour toutes les tables de cette entrepot.

    voici ce que j'ai fait jusqu'à present:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    public void updateLigne(String Entrepot) throws Exception{
        Base b=null;
        Base c=null;
    // La classe Base a été défini    
        try{
        Set<String> s=new TreeSet<String>();
        Iterator<Base> it=m.values().iterator();
    // m est un map<Table,Base> associant à chaque table la base à laquelle elle appartient.
    //La classe Table a aussi été définie.
        c=client.getBase(Entrepot);
     
    while(it.hasNext()){
        String g=it.next().getNom();
        if(g.equals(Entrepot)==false)
    //je récupère le nom de toutes les Bases sauf celle à mettre à jour.
        {s.add(g);
    }
    }
    Iterator<String> iter=s.iterator();
    while(iter.hasNext()){
    String f=iter.next();
     b=client.getBase(f);
     Iterator<Table> i=b.iterator();
    //parcours des tables de chacune de ces bases.
     while(i.hasNext()){
     Table t=i.next();
        Table t1=client.getTable(Entrepot,t.getNom());
        String recup="SELECT * FROM "+t.getNom();
    Statement stmt=b.getConnexion().createStatement();
    ResultSet r=stmt.executeQuery(recup);
    Statement stmt2=c.getConnexion().createStatement();
    ResultSet r2=stmt2.executeQuery(recup);
    ResultSetMetaData rm=r.getMetaData();
    ResultSetMetaData rm2=r2.getMetaData();
    while((r.next())&&(r2.next())){
        for(int a=1;a<=rm.getColumnCount();a++){
            if(r.getString(a).equals(r2.getString(a))==false){
    // s'il ya une différence entre les 2 tables ,celle de la base entrepot est modifiée.
            r2.updateString(a,r.getString(a));
                  }
        }
    }
     
     }    
    }    
        }
     
        catch(Exception e) {
            System.err.println("\n*** Exception caught in updateLigne()");
                throw e;
            }
    }
    Pourriez-vous me dire ce qu'il ne va pas dans mon code?
    S'il ya des question posez-les moi.

  2. #2
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Bonjour,

    Je dois avouer que j'ai pas lu ton code mais il serait sympa de penser à encadrer ton code par les balises CODE prevu à cet effet.

    De plus, si tu as des erreurs dans ton code, n'hesites pas a nous les copier, ca permettra d'aller plus vite pour trouver le probleme.

    Merci

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    ok.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
    public void updateLigne(String Entrepot) throws Exception{
        Base b=null;
        Base c=null;
     
        try{
        Set<String> s=new TreeSet<String>();
        Iterator<Base> it=m.values().iterator();
        c=client.getBase(Entrepot);
     
    while(it.hasNext()){
        String g=it.next().getNom();
        if(g.equals(Entrepot)==false)
        {s.add(g);
    }
    }
    Iterator<String> iter=s.iterator();
    while(iter.hasNext()){
    String f=iter.next();
     b=client.getBase(f);
     Iterator<Table> i=b.iterator();
     while(i.hasNext()){
     Table t=i.next();
        Table t1=client.getTable(Entrepot,t.getNom());
        String recup="SELECT * FROM "+t.getNom();
    Statement stmt=b.getConnexion().createStatement();
    ResultSet r=stmt.executeQuery(recup);
    Statement stmt2=c.getConnexion().createStatement();
    ResultSet r2=stmt2.executeQuery(recup);
    ResultSetMetaData rm=r.getMetaData();
    ResultSetMetaData rm2=r2.getMetaData();
    while((r.next())&&(r2.next())){
        for(int a=1;a<=rm.getColumnCount();a++){
                System.out.println(r.getString(a));
            if(r.getString(a).equals(r2.getString(a))==false){
            r2.updateString(a,r.getString(a));
                  }
        }
    }
     
     }    
    }    
        }
     
        catch(Exception e) {
            System.err.println("\n*** Exception caught in updateLigne()");
                throw e;
            }
    }
    .

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    En ce qui concerne les erreurs, elles ont lieu à l'execution, une exception est systématiquement levé.et je pense que c'est à ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    for(int a=1;a<=rm.getColumnCount();a++){
            if(r.getString(a).equals(r2.getString(a))==false){
            r2.updateString(a,r.getString(a));
                  }
        }
    .

  5. #5
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Je vais te donner quelques conseils, a mon avis, il est recommandé d'editer son dernier message plutot que de faire plusieurs posts a la suite. pour ca il y a le bouton :

    De plus pour mettre les balises CODE, il faut que ton code soit encadré par [code] et [/ code], tu as la possibilité de les mettre automatiquement en utilisant le bouton situé dans l'editeur de message. Pour ca, tu selectionnes tout le code que tu veux encadrer et tu cliques sur ce bouton.

    Pour finir, il peut etre interressant que tu nous fournisses l'exception qui est levé, c'est souvent porteur d'informations utiles

    PS: par rapport a ton code, il va vraiment falloir faire un effort sur les noms que tu donnes à tes variables. Pour une question de maintenabilité, il est important de mettre des noms le plus explicite pour eviter d'avoir à se prendre la tete sur ce qu'elle peut contenir. Par exemple, si j'ai bien compris, va contenir tout les noms d'entrepot donc plutot que d'appeller ta variable s, appelles le plutot nomEntrepot ou un truc du genre mais au moins qu'on sache ce qu'on risque d'y trouver

    Avec le temps, des habitudes, routines se sont mis en place et ca a donné lieu des des normes de codages, il va falloir y jeter un oeil si tu veux que ton code soit vite lisible par tout le monde. Par exemple, pour les boucles, préfère les lettre i,j,k pour l'itération plutot que .
    Pour ce genre de chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     		if(r.getString(a).equals(r2.getString(a))==false)
    , on preferera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     		if(!r.getString(a).equals(r2.getString(a)))
    Etc...

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    Ok , je comprends, mais il semble que l'exception ne soit pas de type SqL.
    mais à vrai dire je nesais pas quel type d'exception c'est

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/12/2005, 23h32
  2. [ASE][12.0] Mise à jour de table
    Par Lps dans le forum Sybase
    Réponses: 9
    Dernier message: 09/12/2005, 15h28
  3. Programmer la mise à jour des tables attachées
    Par _developpeur_ dans le forum Access
    Réponses: 3
    Dernier message: 02/12/2005, 21h29
  4. Mise à jour des tables liées + TIMESTAMP
    Par Homegrown dans le forum Access
    Réponses: 11
    Dernier message: 25/04/2005, 22h52
  5. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 14h24

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