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 :

comparer valeurs ResultSet


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut comparer valeurs ResultSet
    Salut!

    Je voudrais savoir comment comparer l'ancienne et la nouvelle valeur d'un ResultSet?

    J'ai utilisé rset.getString(1) et rset.getString(0) mais ça ne marche pas (rset.getString(0) cause un problème)

    Aidez moi c'est vraiment urgent!!

  2. #2
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Quand tu compare rset.getString(1) et rset.getString(0) tu compare la première et la deuxième colonne d'une même ligne.
    Ce que tu peut faire c'est un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String valeur=rset.getString('la_colonne');
    rset.previous();
    String ancienne_valeur=rset.getString('la_colonne');
    Et ce n'est pas le peine de préciser que c'est urgent c'est pas ça qui fera qu'on te répondra plus vite
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  3. #3
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Désolée pour le fait que c'est urgent!

    J'ai essayé ton code: il ne marche pas:ça bloque au niveau de rset.previous

    voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while (rset.next())
         {
     
           String valeur = rset.getString(1);
           rset.previous();
           String ancienne_valeur = rset.getString(1);
     
     
         }
    P.S:j'ai ajouté le rset.next() car sans lui ça ne marche pas aussi!

    Si tu as une idée sur l'origine du problème, aide moi stp.

    Merci!!

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 145
    Points : 125
    Points
    125
    Par défaut

    je ne comprends pas complétement ton pb. Peux-tu montrer ton code?

    Ce qui est sûr:
    ne marchera jamais car un ResultSet commence ses indices à 1, contrairement aux tableaux

    Je suppose qu'à un moment, tu fais un update sur le ResultSet. Tu peux donc faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String ancienneValeur = rset.getString("NomColonne");
    rs.updateString("NomColonne", "NouvelleValeur"); 
    String  nouvelleValeur = rset.getString("NomColonne");

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    voici mon 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
    51
    52
    53
    54
    55
    56
    57
     
    package oracle_cnn;
     
     
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.Dimension;
    import java.sql.*;
    import java.util.Vector;
    import javax.swing.table.DefaultTableModel;
    import java.util.Timer;
    import java.util.TimerTask;
     
    public class test {
     
       public static void main(String[] args) throws SQLException {
            Timer minuteur = new Timer();
     
            DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
              // Connexion à la base de données
          final Connection  conn =DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:ferr", "user", "password");
     
            TimerTask tache = new TimerTask() {
                public void run() {
     
     
                    // Charger le pilote Oracle
            try {
     
            // Requête SQL 
            //Création d'un objet requête
            Statement stmt = conn.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            //Envoyer la requête et récupérer le résulatat
            ResultSet rset = stmt.executeQuery ("select nolan from fstlan");
     
         // Affichage du résultat
            while (rset.next ()) 
            {
           String valeur = rset.getString(1);
           System.out.println("nouvelle "+valeur);
           rset.previous();
           String ancienne_valeur = rset.getString(1);
           System.out.println("ancienne "+ancienne_valeur);
            }
     
     
            }
            catch (SQLException ex) {
            }
     
     
                }
            };
            minuteur.schedule(tache, 0, 1000);
     
        }
    }

    J'ai pas compris la ligne de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.updateString("NomColonne", "NouvelleValeur");

  6. #6
    in
    in est déconnecté
    Membre expérimenté 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
    Points : 1 718
    Points
    1 718
    Par défaut
    il faut que ton resultset soit scrollable.

    de plus il faut faire attention au premier tour. Je pense que previous ne marche pas au premier tour ...

    tout ceci est dans la javadoc ...

    sinon au lieu d'utiliser previous tu peux simplement stocker la valeur précédente dans un string et la comparer avec la valeur en cours ... enfin je trouve ça aussi bien ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Mais ça n'a aucun sens de faire ça avec un statement !
    C'est comme si tu demandais donne moi la valeur actuelle de l'enregistrement 1 ET sa valeur précédente, c'est naze... elle n'existe plus (ou alors dans un journal si tu as paramétrer la DB pour faire une image avant/après)

    Il faut sauvegarder la valeur et au moment où tu dois tester, tu charges la valeur actuelle, et tu la compares à la valeur sauvegardée.

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    D'accord mais comment faire la sauvegarde alors?

    j'ai utilisé ce code et ça ne marche toujours pas!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     while (rset.next()) 
            {
     
              String ancienne_valeur = rset.getString(1);
              System.out.println("ancienne "+ancienne_valeur);
     
              rset.next();
     
              String valeur = rset.getString(1);
              System.out.println("nouvelle "+valeur);
     
     
            }
    Désolée mais je suis vraiment débutante en java!!

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Peux-tu expliquer ce que tu veux faire (en gros) fonctionnellement ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    in
    in est déconnecté
    Membre expérimenté 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
    Points : 1 718
    Points
    1 718
    Par défaut
    plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String temp = "";
    while(rs.next()){
         if( !temp.equals(rs.getString(1)){
              //  la chaine est différente
         } else {
             //  la chaine est identique
         }
         temp = rs.getString(1);
    }
    apres tu peux aussi traiter le premier resultat différemment des autres (en testant sur "".equals(temp) ou alors en mettant temp à nul...)

    enfin bref ce n'est qu'un exemple à améliorer ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  11. #11
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    J'ai un programme qui tourne en arrière plan et qui met à jour une table d'une base de données et que mon application affiche la valeur ajoutée dans la table à l'aide du resultset.

    J'aimerais que à chaque fois que la mise à jour est faite j'exécute un programme (ex afficher du texte ...)

    Mon problème est que je ne sais pas comment détecter cette mise à jour?

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ca serait plutôt le travail d'un trigger sur la table...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 145
    Points : 125
    Points
    125
    Par défaut
    Ah, avec ton code et tes explications, c'est plus clair. Je pensais que tu utilisais le resultset pour updater des données. Mais ce n'est pas ton programme qui met à jour les données.

    Je crois que tu as plutôt un problème d'algorithme et de compréhension du resultset. Le resultset te sert à parcourir les lignes renvoyées par ta requête de select et éventuellement de mettre des valeurs à jour. Dans ton algo, tu cherches à récupérer l'ancienne valeur sur une ligne, puis tu avances sur la ligne suivante . Donc tu ne compareras pas les valeurs de la même ligne.

    Essaye un algorithme de ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    tant que {
      pause 10s;
      nouvelleValeur = rs.getSring(1);
      if (ancienneValeur != nouvelleValeur){
        executeProgramme()
      }
      ancienneValeur = nouvelleValeur;
    }
    A toi d'adapter la valeur de la pause, de parcourir le resultSet si tu as plusieurs lignes à traiter, les éventuelles autres conditions de sortie, ...

  14. #14
    in
    in est déconnecté
    Membre expérimenté 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
    Points : 1 718
    Points
    1 718
    Par défaut
    sinon tu peux aussi ajouter un champ update_date a ta table. Ce champ doit etre mis à jour par un trigger.


    ensuite tu interroge simplement cette date en la comparant à maintenant. attention si les serveurs sont différents au calcul de la différence de date ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  15. #15
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    Je vais essayer de suivre vos conseils!

    Pour le champs update_date je ne peus pas l'ajouter car la base ne m'appartient pas et je ne peux pas la modifier!!

Discussions similaires

  1. [XSLT] xsl:foreach comparer valeurs..
    Par jeb001 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/03/2008, 15h07
  2. comparer valeurs de plusieurs variables
    Par DiamonDonald dans le forum VB.NET
    Réponses: 15
    Dernier message: 21/02/2008, 17h42
  3. Comparer valeur null champ
    Par Tyler Durden dans le forum SQL
    Réponses: 2
    Dernier message: 30/08/2007, 11h58
  4. [VB.net] Comparer valeurs d'une table à une variable
    Par collaud_vb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/09/2006, 15h24
  5. Comparer 2 resultsets
    Par rgomes dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2006, 17h51

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