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 d'utilisation du ResultSet


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Par défaut Problème d'utilisation du ResultSet
    Bonjour,

    j'ai une méthode qui prend en paramètre un resultset qui me renvoie bien deux lignes j'ai testé.Méthode ci-dessous :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    public String indicatorDynamicAge(JTextField ageJTextField) {
     
            String constraint2 = "";
     
            if (!ageJTextField.equals(null)) {
     
                constraint2 = "AND birthday_Customer like '" + Integer.toString(year - Integer.parseInt(ageJTextField.getText())) + "%'";
     
            }
     
     
     
     
            return constraint2;
     
        }
     
     
     
     
        // calcul the different indicators 
     
        public void indicatorDynamic(ResultSet rs, JLabel label1, JLabel label2, JLabel label3, JLabel label4) {
     
            try {
     
                int nbrLoan = 0;
     
                Double average = 0.0;
     
                int loanDuration = 0;
     
                int avgDuration = 0;
     
                while (rs.next()) {
     
     
     
     
                    nbrLoan++;
     
                    System.out.println(nbrLoan);
     
                    average += rs.getInt("amount_Sim");
     
                    System.out.println(average);
     
                    loanDuration += rs.getInt("duration_Sim");
     
                }
     
                try {
     
                    avgDuration = (loanDuration / nbrLoan);
     
                } catch (ArithmeticException e) {
     
                    avgDuration = 0;
     
                }
     
     
     
     
                label1.setText("Nombre de prêt : " + nbrLoan);
     
                label2.setText("Montant total des prêts : " + average);
     
                label3.setText("Durée moyenne des prêts : " + avgDuration);
     
                label4.setText("Benefice total : " + "200 000 000");
     
            } catch (SQLException ex) {
     
                Logger.getLogger(ControllerScreenIndicator.class.getName()).log(Level.SEVERE, null, ex);
     
                System.out.println("fail sql");
     
            }
     
     
     
     
        }
    le problème c'est que ça ne modifie jamais les variables dans le while et je ne comprend pas pourquoi, étant donnée que j'ai bien un resultset non vide. Si quelqu'un pouvait m'aider je ne comprend pas du tout et j'ai essayé beaucoup de chose! Merci d'avance.

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    ou est ce que tu definis ton Resultset?
    et comment fais-tu ton appel?

    Eric

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Par défaut
    Bonjour,

    Tout d'abord merci de votre réponse :

    J'obtiens mon ResultSet via cette méthode :
    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
    public ResultSet getLoanIndicators(int idAgency, String constraint) {
     
            ResultSet rslt = null;
            try {
                String query = "SELECT first_Name_Customer,last_Name_Customer, percentage_Rate, monthly_Sim, duration_Sim,birthday_Customer, description_LoanRef, amount_Sim "
                        + "FROM LoanSimulation ls, Loan l, Customer c, Agency a,Consultant ct, LoanRef lr  "
                        + "WHERE l.id_Sim = ls.id_Sim "
                        + "AND c.id_Customer = ls.id_Customer "
                        + "AND ct.id_Consultant = ls.id_Consultant "
                        + "AND a.id_Agency = ct.id_Agency "
                        + "AND ls.id_LoanRef = lr.id_LoanRef "
                        + "AND a.id_Agency = ? ";
                if (!constraint.equals("")) {
                    query = query + constraint;
                }
                PreparedStatement queryPrep = conn.prepareStatement(query);
                queryPrep.setInt(1, idAgency);
                ResultSet rs = queryPrep.executeQuery();
                rslt= rs;
            } catch (SQLException ex) {
                Logger.getLogger(AccessDB.class.getName()).log(Level.SEVERE, null, ex);
     
            }
            return rslt;
        }

    Ensuite ma méthode est appelé ici :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     } else if (e.getSource() == submitButton) {
                //String constraint="";
                String constraint = setIndicatorDynamic(periodJDatePicker1.getDate(), periodJDatePicker2.getDate(), typeLoan, age);
                System.out.println(typeLoan);
                ResultSet rs = db.getLoanIndicators(idC0, "");
                this.indicatorDynamic(rs, label1, label2, label3, label4);
            }

  4. #4
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    et qu´est ce que tu as comme resultat ou erreur?
    Eric

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Par défaut
    Merci de vos réponses, je n'ai aucune erreur, la méthode permet de modifier des labels et dans ce cas cela utilise les valeurs d'initialisations ça ne modifie jamais les valeurs de mes variables :/ je ne comprend pas même la valeur de ma variable nbrLoan qui s'incrémente de 1 ne change pas alors qu'en testant la requête en BDD cela me récupère bien des lignes, le while devrait donc normalement se jouer plusieurs fois

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    J'ai du mal à comprendre ce qui te pose soucis. Ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    System.out.println(nbrLoan);
    ne s'affiche jamais, comme si il n'y avait pas de résultat à ta requête?


    Aussi,, ça
    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
    public String indicatorDynamicAge(JTextField ageJTextField) {
     
            String constraint2 = "";
     
            if (!ageJTextField.equals(null)) {
     
                constraint2 = "AND birthday_Customer like '" + Integer.toString(year - Integer.parseInt(ageJTextField.getText())) + "%'";
     
            }
     
     
     
     
            return constraint2;
     
        }
    Ca mérite une triple paire de baffe en double aller-retour:
    • Tu ouvre la voie à de l'injection SQL alors qu'ailleurs tu utilise un preparedStatement
    • Tu manipule tes datas comme des Strings au lieu d'utiliser le format date de la DB.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Salut.
    J'ai mis en rouge mes observations.
    Citation Envoyé par hatlas Voir le message
    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
    public ResultSet getLoanIndicators(int idAgency, String constraint) {
    
            try {
                String query = "SELECT first_Name_Customer,last_Name_Customer, percentage_Rate, monthly_Sim, duration_Sim,birthday_Customer, description_LoanRef, amount_Sim "
                        + "FROM LoanSimulation ls, Loan l, Customer c, Agency a,Consultant ct, LoanRef lr  "
                        + "WHERE l.id_Sim = ls.id_Sim "
                        + "AND c.id_Customer = ls.id_Customer "
                        + "AND ct.id_Consultant = ls.id_Consultant "
                        + "AND a.id_Agency = ct.id_Agency "
                        + "AND ls.id_LoanRef = lr.id_LoanRef "
                        + "AND a.id_Agency = ? ";
                if (!constraint.equals("")) {
                    query = query + constraint;/*Quel est l'intérêt de faire cette concaténation?Alors que l'on voit bien que tu paramètres ta requête avec un seul paramètre.*/
                }
                PreparedStatement queryPrep = conn.prepareStatement(query);
                queryPrep.setInt(1, idAgency)
                ResultSet rs = queryPrep.executeQuery();
                rslt= rs;
            } catch (SQLException ex) {
                Logger.getLogger(AccessDB.class.getName()).log(Level.SEVERE, null, ex);
                
            }
            return rslt;
        }

    Ensuite ma méthode est appelé ici :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     } else if (e.getSource() == submitButton) {
                //String constraint="";
                String constraint = setIndicatorDynamic(periodJDatePicker1.getDate(), periodJDatePicker2.getDate(), typeLoan, age);
                System.out.println(typeLoan);
                ResultSet rs = db.getLoanIndicators(idC0, "");/*On voit bien que ton second paramètre est vide mais nulle part tu montre l'origine de la variable idC0. En réalité ta méthode ne prend en paramètre qu'un seul argument puisque le 2ème ne sert à rien en tout cas pas ici.Enfin,à part servir le test que tu peux d'ailleurs virer dans la méthode getLoanIndicators .*/
                this.indicatorDynamic(rs, label1, label2, label3, label4);
            }
    A ta place j'écrirai une seule méthode qui prendra en paramètre seulement l'idAgency dans le corps de laquelle j'effectue tout le traitement.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Par défaut
    Ok merci pour vos réponses, j'ai trouvé mon erreur je passais mal un paramètre à ma méthode ce qui faussait ma requête et dire que j'ai galéré comme un abrutis sans comprendre. l'idC0 était bien inutile (je me suis trompé dans le paramètre, ce n'était pas celui-ci). Merci kasko, Merci à vous ! pour la concaténation ça me sert à ajouter des contraintes si différents critères sont entré ou non.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Citation Envoyé par hatlas Voir le message
    pour la concaténation ça me sert à ajouter des contraintes si différents critères sont entré ou non.
    Salut.
    Lors de l'affectation de la valeur à tes paramètres tu affectes seulement pour l'idAgency mais jamais à constraint ce qui m'a d'ailleurs amené à dire que le 2ème paramètre est inutile voire dangereux puisque même si une contrainte est ajouté elle ne reçoit jamais de valeur(Autrement dit,elle est toujours nulle et ta requête serait un truc comme ça "AND a.id_Agency = ? null ";).
    ResultSet rs = db.getLoanIndicators(idC0, "/*Tu affectes une valeur vide histoire de rendre ton test vrai et donc empêcher la concaténation d'où ma suggestion de virer le test ainsi que le 2ème paramètre sauf si la méthode est appelé quelque part où ce paramètre est utilisé.*/")
    Bref,si ton problème est résolu n'oublie pas de passer la discussion en Résolue.

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

Discussions similaires

  1. Problème methode readline
    Par dark0502 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 18/03/2009, 22h52
  2. Problème Method POST
    Par natie_49 dans le forum Web
    Réponses: 5
    Dernier message: 06/03/2007, 16h07
  3. [Servlet] Problème Methode init
    Par drixfkc dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 10/08/2006, 12h58
  4. Problème Methode POST
    Par nguthans dans le forum Langage
    Réponses: 3
    Dernier message: 13/01/2006, 20h28
  5. Problème methode POST
    Par raptor70 dans le forum Langage
    Réponses: 18
    Dernier message: 24/10/2005, 10h57

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