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 :

divers problème avec Java et jdbc


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut divers problème avec Java et jdbc
    Bonjour @ tous! Je travaille sur un projet, et là jss un peu bloqué car j'ai divers problème que je n'arrive pas à résoudre :

    j'ai une var "rep" de type ResultSet dans laquelle je stocke le résultat de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(num) from nom_table
    .
    et je souhaite comparer la valeur stockée dans "rep" avec une autre variable de type Int... comment dois-je faire??

    pas moyen d'insérer ou de modifier dans ma table... je pense que c'est mal codé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ps = c.getConnection().prepareStatement("update Personne set nom=?, prenom=?, age=?, adresse=? where num=?");
     
                            ps.setInt(1, i);
                            ps.setString(2, nom);
                            ps.setString(3, prenom);
                            ps.setInt(4, age);
                            ps.setString(5, adr);
                            ps.setString(6, numTel);
     
                            ps.executeUpdate();
    (ps étant un PrepareStatement)

    problème de bouton : lorsque je clik sur un certain bouton, j'ai fait en sorte qu'un nouveau bouton apparaisse (permettant la validation en fait)... le problème est que maintenant je voudrai le faire disparaitre (pas un setEnabled(false); )... quelqu'un C til faire?

    voilà jvous serai trés trés reconnaissant de bien vouloir me consacrer un pti moment histoire que je puisse avancer dans mon application... ciao tous
    Juan

  2. #2
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    'jour,
    J'ai peut être une indication pour ton premier problème.
    Changer la requête par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(num) as SOMME from nom_table
    (c'est juste pour récupérer un nom de colonne)

    Ensuite, tu utilises ton ResultSet comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rep.next();
    int monEntierQuiVaBien  =  rep.getInt("SOMME");
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  3. #3
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    re'jour,
    Pour ton second problème, je crois que cela vient de l'ordre de déclaration de tes variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ps = c.getConnection().prepareStatement("update Personne set nom=?, prenom=?, age=?, adresse=? where num=?");
     
                            ps.setInt(1, i);
                            ps.setString(2, nom);
                            ps.setString(3, prenom);
                            ps.setInt(4, age);
                            ps.setString(5, adr);
                            ps.setString(6, numTel);
     
                            ps.executeUpdate();
    En fait, la première valeur est une chaine de caractère et non un entier. Tu dois avoir un en trop.
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    euh ben pourtant les ce sont bien 2 entiers dans ma table...

    jss ent rain d'essayer ta première solution : ya pas d'erreur C déjà bien

    merci
    Juan

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    en fait je souhaite avoir le nombre de ligne que contient ma table... c'est pour ça le "select count..."...

    mais G pas bien compris à koi sert le ?
    Juan

  6. #6
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Si je ne me trompe pas, le .next() te permet de passer au premier enregistrement de ton resultSet, un peu comme pour les Iterator dans les collections
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    oui mais donc je n'en ai pas besoin si puisk le compte déjà ,le nombre de ligne ?
    Juan

  8. #8
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    En ce qui concerne le second problème, normalement, l'entier que tu passes dans ton (ie. 1 dans l'exemple) doit correspondre à la valeur que tu veux passer dans ta requête.
    Là tu utilises comme requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ps = c.getConnection().prepareStatement("update Personne set nom=?, prenom=?, age=?, adresse=? where num=?");
     
                            ps.setInt(1, i);
                            ps.setString(2, nom);
                            ps.setString(3, prenom);
                            ps.setInt(4, age);
                            ps.setString(5, adr);
                            ps.setString(6, numTel);
     
                            ps.executeUpdate();
    J'imagine que tu devrais avoir plutôt comme première valeur associée à l'entier 1 la variable "nom" et non pas "i".
    Autrement dit, je mettrai un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ps = c.getConnection().prepareStatement("update Personne set nom=?, prenom=?, age=?, adresse=? where num=?");
     
                            ps.setString(1, nom);
                            ps.setString(2, prenom);
                            ps.setInt(3, age);
                            ps.setString(4, adr);
                            ps.setString(5, numTel);
     
                            ps.executeUpdate();
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    en fait je crois que je ferai mieux de poser la question : quelle requête dois je utiliser pour compter le nombre de ligne de ma table, et comment utiliser le résultat en tant que int...
    Juan

  10. #10
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Citation Envoyé par chti_juanito
    oui mais donc je n'en ai pas besoin si puisk le compte déjà ,le nombre de ligne ?
    En fait, le select count compte le nombre de ligne dans ta base de données, pas dans ton resultSet.

    Quand tu exécutes une requête sur une base, la reponse te revient sous forme de tableau (lignes X colonnes) avec les enregistrements qui correspondent à ta demande. Ce tableau est enregistré dans ton resultSet. Il faut donc se placer à la première ligne de ton resultSet pour récupérer la première valeur associée à ta requête.
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    ok
    Juan

  12. #12
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Citation Envoyé par chti_juanito
    en fait je crois que je ferai mieux de poser la question : quelle requête dois je utiliser pour compter le nombre de ligne de ma table, et comment utiliser le résultat en tant que int...
    A priori ta requête pour compter le nombre de lignes est bonne.

    Si j'ai rajouté le "as SOMME", c'est pour pouvoir identifier la colonne correspondant à la réponse dans le resultSet.

    Il faut voir un resultSet comme un tableau dont tu parcours les lignes avec .next() et dont tu interroges les colonnes avec par exemple resultSet.getInt("SOMME"); où SOMME est le nom de la colonne, ou bien un entier resultSet.getInt(0); si tu connais le numéro de la colonne. (dans ton exemple, il n'y en a qu'une)
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    jviens d'essayer comme tu dis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rep2 = st.executeQuery("select count(num) as SOMME from Personne");
                            rep2.next();
                            int ent  =  rep2.getInt("SOMME");
     
                            System.out.println(ent);
    Rien ne s'affiche...
    Juan

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    voici un partie du code plus complète :

    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
     else if (e.getSource() == boutonSuivant)
                    {
     
                        try
                        {
                            st = c.getConnection().createStatement();
                            rep2 = st.executeQuery("select count(num) as SOMME from Personne");
                            rep2.next();
                            int ent  =  rep2.getInt("SOMME");
     
                            System.out.println(ent);
     
                              .......................... 
                        }
                        catch (SQLException e2)
                        {
     
                        }
    Juan

  15. #15
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Est-ce que tu as un moyen de vérifier la requête à la main? Genre un mode console dans lequel tu pourrais tapper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(num) as SOMME from Personne.
    ?
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  16. #16
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Certains SGBD préfèrent avoir un ; à la fin d'une requête. La tienne peut ne rien renvoyer.
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    non c'est pour cela que j'ai fait un sachant que j'ai déjà réalisé une requête pour l'insertion, et ça marche trés bien... par contre modification ne marche pas
    Juan

  18. #18
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Tu utilises quel SGBD?
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    mais il ya forcément un pb pour la requête car je viens de rajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    catch (SQLException e2)
                        {
                                System.out.println("Erreur de validation ajouter");
                        }
    et lorsque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rep2 = st.executeQuery("select count(num) as SOMME from Personne");
                            rep2.next();
                            int ent  =  rep2.getInt("SOMME");
    n'est pas en commentaire, le msg d'erreur s'affiche sur la console...
    Juan

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 288
    Points : 76
    Points
    76
    Par défaut
    celui fournit par microsoft : odbc
    Juan

Discussions similaires

  1. Problème avec Java Sun
    Par Ticlaude dans le forum Windows Vista
    Réponses: 8
    Dernier message: 25/03/2007, 04h12
  2. problème avec java
    Par man_kio dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/02/2007, 22h12
  3. Réponses: 5
    Dernier message: 11/01/2007, 12h09
  4. Divers problèmes avec Swing
    Par ratakses dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 03/09/2006, 21h57
  5. divers problèmes avec wxwidgets
    Par altadeos dans le forum wxWidgets
    Réponses: 4
    Dernier message: 08/02/2006, 09h36

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