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 :

Somme sql entre deux dates


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut Somme sql entre deux dates
    Salut les développeurs,
    J’ai un petit problème avec une requête SQL, je vais me casser les dents dessus.
    J’ai une table Achat, contenant parmi autres deux colonnes (date et paiement). Quand je veux sommer les paiements entre une plage de date, si au moins l’une des deux dates des bords des plages existent dans ma table la somme est calculée normalement. Si les deux dates n’y figure pas une exception est générée. Voici ma petite voyelle de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query1 = "select  SUM (paiement) from Achat WHERE Achat.date between '"+( date )+"' and  '"+( date1 )+"'";
    Et voice l’exception:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at vues.Paiement.jButton1ActionPerformed(Paiement.java:234)
    at vues.Paiement.access$300(Paiement.java:16)
    ………………
    Ça pointe vers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("  "+rsltSet.getObject(1).toString());
    Ou est ce que j’ai fauté??!

  2. #2
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 681
    Points
    1 681
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("  "+rsltSet.getObject(1).toString());
    ça peut être : (1) rsltSet.getObject(1) si rsltSet est null
    ou (2) rsltSet.getObject(1).toString() si le getObject(1) renvoie null.

    A vérifier, il faudra ajouter 2 lignes de log, tant qu'à faire, au lieu des System.out.println(...);
    Et le .toString() est le plus souvent facultatif. S'en passer peut éviter le cas de plantage n.2.

  3. #3
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    avoir du code un peu plus complet, histoire de voir ce que tu fais, et une stacktrace entière, ça aiderait à t'aider

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    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
            String s, s1;
            String J, M, A, A1;
            String date, date1;
            J = jj.getSelectedItem().toString();
            M = mm.getSelectedItem().toString();
            A = aa.getSelectedItem().toString();
            String t[] = A.split("");
            String aa;
            aa = "" + t[2] + "" + t[3];
            date = J + "/" + M + "/" + aa; //date debut
     
            J = jj1.getSelectedItem().toString();
            M = mm1.getSelectedItem().toString();
            A1 = aa1.getSelectedItem().toString();
     
            String t2[] = A1.split("");
            String aa1;
            aa1 = "" + t2[2] + "" + t2[3];
            date1 = J + "/" + M + "/" + aa1; //date fin
     
            String url = "jdbc:h2:./src/BD/BDH22";
            String login = "root";
            String password = "";
            Connection connection = null;
            Statement stmt = null;
            ResultSetMetaData rsltSetMeta = null;
     
            try {
                connection = DriverManager.getConnection(url, login, password);
            } catch (SQLException ex) {
                Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println("c connecté pour ouvrir dossier");
            try {
                stmt = connection.createStatement();
     
     
            } catch (SQLException ex) {
                Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
            }
     
     
            String query1 = "select  SUM (paiement) from Achat WHERE Achat.date between '" + (date) + "' and  '" + (date1) + "'";
            ResultSet rsltSet = null;
            try {
                rsltSet = stmt.executeQuery(query1);
                rsltSetMeta = rsltSet.getMetaData();
     
            } catch (SQLException ex) {
                Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
            }
     
     
            try {
                while (rsltSet.next()) {
     
                    System.out.println(" ffffffffff " + rsltSet.getMetaData().getColumnCount());
                    for (int i = 1; i <= rsltSetMeta.getColumnCount(); i++) {
     
     
                        System.out.println("  " + rsltSet.getObject(1).toString());
                        this.c.setText(rsltSet.getObject(1).toString());  //ecriture dans mon interface
                    }
                }
            } catch (SQLException ex) {
                Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
     
            }
            c.setVisible(true);
            c.setEditable(false);
            da.setVisible(true);
    tchize_ voila le boutton de tout mon code
    Cincinnatus je n'ai pas compris!

  5. #5
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Tu peux nous donner la méthode complète (de préférence en corrigeant ton indentation qu'on sache suivre) et la sortie complète de ta console. JE suspecte que tu as eu une exception juste avant le parcours du result set. Vu que tu continue quand même, tu te retrouve à parcourir un vieux ResultSet où la colonne 1 contient un null.

    D'une manière générale, quand tu as une exception, traite là. Juste l'afficher et continuer, c'est cacher le problème sous le tapis.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    Plusieurs choses qui polluent ton code :

    1) Pourquoi utiliser un A.split("") qui est inefficace dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            A=aa.getSelectedItem().toString();       
            String t[]=A.split("");
            String aa;
            aa=""+t[2]+""+t[3];
    Cela fait que si dans aa.getSelectedItem().toString() a pour valeur "2017" alors aa = "17"
    Dans ce cas, il vaut mieux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            aa = getSelectedItem().toString().substring(2);
    2) En SQL c'est toujours mieux de nommer les colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query1 = "select  SUM (paiement) AS mon_total from Achat WHERE Achat.date between '"+( date )+"' and  '"+( date1 )+"'";
    3) Il n'est pas utile de recourir au ResultSetMetaData pour parcourir les colonnes du resultset vu qu'il n'y a qu'une seule colonne !
    d'autant plus inutile puisque tu écris dans la boucle rsltSet.getObject(1) ce qui fait que même s'il y avait eu plusieurs colonnes, tu ne lis que la première.

    Ensuite, cette requête SQL ne renvoie qu'une seule ligne (pas plus)
    Donc tu peux allègrement supprimer le while qui sert à parcourir les enregistrements quand il y en a plusieurs.

    Simplification du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            try {
                rsltSet.next()  // pour positionner sur le 1er et unique enregistrement
                System.out.println(rsltSet.getObject(1).toString());
                this.c.setText(rsltSet.getObject(1).toString());  //ecriture dans mon interface
     
            } catch (SQLException ex) {
                Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
     
            }
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    toujours la même chose, rien n'y fait!

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    Je n'ai pas dit non plus que cela allait régler le problème.

    Remplace la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query1 = "select  SUM (paiement) AS mon_total from Achat WHERE Achat.date between '"+( date )+"' and  '"+( date1 )+"'";
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query1 = "select  SUM (paiement) AS mon_total from Achat WHERE Achat.date between '01/01/17' and  '31/12/17'";
    Si cela fonctionne alors c'est un problème de données.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    bravo quand j'ecrit mes date manuellement le resultat est retourné exacte!!
    qu'est ce que je peux faire?? je dois regler ça!!

    le hic c'est que quand j'affiche mes dates extraite à partir de mes Jcomboo, elles sont affichées correctement!

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    quand tu utilises les JCombo, essayes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String query1 = "select  SUM (paiement) AS mon_total from Achat WHERE Achat.date between '"+( date )+"' and  '"+( date1 )+"'";
    System.out.println(query1 );
    quand ça plante, examine le query1 et l'explication apparaitra probablement (par exemple, il manque le mois ou le jour ...)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    j'ai affiché la requete et ça va!
    je me suis rendu compte que le problème y'est quand je suis dans une plage de date ou aucun Achat n'est enregistré

    j'ai fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      try {
                rsltSet.next();
    if(rsltSet.getObject(1)==null)   {
        this.c.setText("0 DA");
    }     else{    
     
                System.out.println(rsltSet.getObject(1).toString());
                this.c.setText(rsltSet.getObject(1).toString()); }
     
            } catch (SQLException ex) {
                Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
     
            }
    merci pour l'aide

  12. #12
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    Cela voudrait dire que la requête d'agrégation (avec SUM) ne renvoie pas d'enregistrement ce qui m'étonne un peu mais bon.
    Alors tu dois tester rsltSet.next() qui renvoie vrai quand il y a un enregistrement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (rsltSet.next()) {
    ... // ici le code si il y a un enregistrement
    } else {
    System.out.println("... rien ...");
    }
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  13. #13
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    Oups exception!!

    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
    select  SUM (paiement) AS mon_total from Achat WHERE Achat.date between '01/01/17' and  '02/01/17'
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at vues.Paiement.jButton1ActionPerformed(Paiement.java:259)
    	at vues.Paiement.access$300(Paiement.java:17)
    	at vues.Paiement$4.actionPerformed(Paiement.java:87)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.Component.processMouseEvent(Component.java:6535)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    	at java.awt.Component.processEvent(Component.java:6300)
    	at java.awt.Container.processEvent(Container.java:2236)
    	at java.awt.Component.dispatchEventImpl(Component.java:4891)
    	at java.awt.Container.dispatchEventImpl(Container.java:2294)
    	at java.awt.Component.dispatchEvent(Component.java:4713)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    	at java.awt.Container.dispatchEventImpl(Container.java:2280)
    	at java.awt.Window.dispatchEventImpl(Window.java:2750)
    	at java.awt.Component.dispatchEvent(Component.java:4713)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    	at java.awt.EventQueue.access$500(EventQueue.java:97)
    	at java.awt.EventQueue$3.run(EventQueue.java:709)
    	at java.awt.EventQueue$3.run(EventQueue.java:703)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    	at java.awt.EventQueue$4.run(EventQueue.java:731)
    	at java.awt.EventQueue$4.run(EventQueue.java:729)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    Tu peux re-poster le code complet ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  15. #15
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    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
            String s,s1; String J,M,A,A1; String date,date1; 
            J=jj.getSelectedItem().toString();
            M=mm.getSelectedItem().toString();
            A=aa.getSelectedItem().toString();       
            String t[]=A.split("");
            String aa;
            aa=""+t[2]+""+t[3];
            date=J+"/"+M+"/"+aa;
     
            J=jj1.getSelectedItem().toString();
            M=mm1.getSelectedItem().toString();
            A1=aa1.getSelectedItem().toString();
     
    String t2[]=A1.split("");
    String aa1;
    aa1=""+t2[2]+""+t2[3];
            date1=J+"/"+M+"/"+aa1;
     
            System.out.println("1 "+date+" 2 "+date1);
            String url = "jdbc:h2:./src/BD/BDH22";
                    String login = "root";
                    String password = "";
                    Connection connection = null;
                    Statement stmt = null;
                     ResultSetMetaData rsltSetMeta = null;
     
                    try {
                        connection = DriverManager.getConnection(url,login,password);
                    } catch (SQLException ex) {
                        Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    System.out.println("c connecté pour ouvrir dossier");
                    try {
                     stmt = connection.createStatement();
     
     
                    } catch (SQLException ex) {
                        Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
                        JOptionPane.showMessageDialog(null, ex.getMessage());
                    }
     
     String query1 = "select  SUM (paiement) AS mon_total from Achat WHERE Achat.date between '"+( date )+"' and  '"+( date1 )+"'";
                    System.out.println(query1 );
                 ResultSet   rsltSet = null ;
        try {
            rsltSet = stmt.executeQuery(query1);
            rsltSetMeta = rsltSet.getMetaData();
     
        } catch (SQLException ex) {
            Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
     
     
     
        try {
      rsltSet.next();          
    if(rsltSet.getObject(1)==null)   {
     
        this.c.setText("0 DA");
    }     else{    
     
                System.out.println(rsltSet.getObject(1).toString());
                this.c.setText(rsltSet.getObject(1).toString()); }
     
            } catch (SQLException ex) {
                Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
     
            }
        c.setVisible(true);
        c.setEditable(false);
        da.setVisible(true);
    ce qui m'intrigue c'est que, quand je mets les date suivante 01/01/17 et 31/12/2017 le resultat et tout juste, quand je met 01/01/17 et 01/12/2017 le resultat est 0 !!

    je ne comprend plus rien!! ça fait des jours que je travaille dessus!

    est ce que vous avez une autre idée à me proposer??

    du genre je selectionne tous les paiement des achat de la periode X-Y , puis je somme!!

  16. #16
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    Pas bon du tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      rsltSet.next();          
    if(rsltSet.getObject(1)==null)   {
     
        this.c.setText("0 DA");
    }     else{    
     
                System.out.println(rsltSet.getObject(1).toString());
                this.c.setText(rsltSet.getObject(1).toString()); }
     
            }

    Il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(rsltSet.next())   {
     
                System.out.println(rsltSet.getObject(1).toString());
                this.c.setText(rsltSet.getObject(1).toString()); }
    }     else{    
     
        this.c.setText("0 DA");
     
            }
    Pourquoi ?

    Parce que rsltSet.next() teste si il existe un enregistrement
    si cet enregistrement existe alors on peut récupérer la valeur de rsltSet.getObject(1)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  17. #17
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    ça n'a pas marché! la même chose

  18. #18
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    Citation Envoyé par BenkessiratAmina Voir le message
    ça n'a pas marché! la même chose
    C'est trop vague

    Quel est le résultat ???
    On peut avoir le code que tu utilises ?
    Et la stacktrace ?

    [EDIT]
    d'après la doc de H2 (le sgbd que tu utilises) le résultat est null si aucun enregistrement est sélectionné :
    https://h2database.com/html/functions.html#sum

    Donc tu dois faire if(rsltSet.next())
    pour vérifier que tu as bien un enregistrement pour en récupérer la valeur
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  19. #19
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    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
      String s,s1; String J,M,A,A1; String date,date1; 
            J=jj.getSelectedItem().toString();
            M=mm.getSelectedItem().toString();
            A=aa.getSelectedItem().toString();       
            String t[]=A.split("");
            String aa;
            aa=""+t[2]+""+t[3];
            date=J+"/"+M+"/"+aa;
     
            J=jj1.getSelectedItem().toString();
            M=mm1.getSelectedItem().toString();
            A1=aa1.getSelectedItem().toString();
     
    String t2[]=A1.split("");
    String aa1;
    aa1=""+t2[2]+""+t2[3];
            date1=J+"/"+M+"/"+aa1;
     
            System.out.println("1 "+date+" 2 "+date1);
            String url = "jdbc:h2:./src/BD/BDH22";
                    String login = "root";
                    String password = "";
                    Connection connection = null;
                    Statement stmt = null;
                     ResultSetMetaData rsltSetMeta = null;
     
                    try {
                        connection = DriverManager.getConnection(url,login,password);
                    } catch (SQLException ex) {
                        Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    System.out.println("c connecté pour ouvrir dossier");
                    try {
                     stmt = connection.createStatement();
     
     
                    } catch (SQLException ex) {
                        Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
                        JOptionPane.showMessageDialog(null, ex.getMessage());
                    }
     
     
     String query1 = "select  SUM (paiement) AS mon_total from Achat WHERE Achat.date between '"+( date )+"' and  '"+( date1 )+"'";
     
      System.out.println(query1 );           
     ResultSet   rsltSet = null ;
        try {
            rsltSet = stmt.executeQuery(query1);
            rsltSetMeta = rsltSet.getMetaData();
             System.out.println("je ss ds le try");
     
        } catch (SQLException ex) {
            Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
     
          try {
               System.out.println("je ss ds le try de while");
     
               if(rsltSet.next())   {
     
                System.out.println(rsltSet.getObject(1).toString());
                this.c.setText(rsltSet.getObject(1).toString()); }
        else{    
     
        this.c.setText("0 DA");
     
            }
                } catch (SQLException ex) {
                Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
     
            }
     
        c.setVisible(true);
        c.setEditable(false);
        da.setVisible(true);
    Voila voilou mon code

    ce qui m'intrigue, c'est que quand je mes les dates : 01/01/2017 et 31/12/2017 par exmple tout va bien et le resultat est juste, mais quand je mets les dates 01/01/2017 et 01/12/2017 ça genere une exception!! alors que ça ne doit pas être nulle, voici l'exception:


    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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at vues.Paiement.jButton1ActionPerformed(Paiement.java:234)
    	at vues.Paiement.access$300(Paiement.java:17)
    	at vues.Paiement$4.actionPerformed(Paiement.java:87)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.Component.processMouseEvent(Component.java:6535)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    	at java.awt.Component.processEvent(Component.java:6300)
    	at java.awt.Container.processEvent(Container.java:2236)
    	at java.awt.Component.dispatchEventImpl(Component.java:4891)
    	at java.awt.Container.dispatchEventImpl(Container.java:2294)
    	at java.awt.Component.dispatchEvent(Component.java:4713)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    	at java.awt.Container.dispatchEventImpl(Container.java:2280)
    	at java.awt.Window.dispatchEventImpl(Window.java:2750)
    	at java.awt.Component.dispatchEvent(Component.java:4713)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    	at java.awt.EventQueue.access$500(EventQueue.java:97)
    	at java.awt.EventQueue$3.run(EventQueue.java:709)
    	at java.awt.EventQueue$3.run(EventQueue.java:703)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    	at java.awt.EventQueue$4.run(EventQueue.java:731)
    	at java.awt.EventQueue$4.run(EventQueue.java:729)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

    ça pointe vers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      System.out.println(rsltSet.getObject(1).toString());
    J'en ai gravemnt beosin d'une solution

  20. #20
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Une série de remarques:


    1) check tes nulls, tu a un nullpointerexception depuis le début de ce sujet et tu ne teste toujours pas si ta valeur est null avant de l'utiliser D'autant plus que la doc de SUM dit clairement que ça peux renvoyer null.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (resultSet.getObjec(1) != null){
    //......
    2) si tu n'arrive pas à faire ta connexion, inutile de continuer et de s'exposer à plus d'erreur. Ca n'a pas de sens de continuer à essayer d'interroger la db si tu n'arrive pas à t'y connecter. Donc ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    try {
                        connection = DriverManager.getConnection(url,login,password);
                    } catch (SQLException ex) {
                        Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
                    }
    sort de ta méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                    try {
                        connection = DriverManager.getConnection(url,login,password);
                        return; // or throw exception?
                    } catch (SQLException ex) {
                        Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
                    }
    Même remarque ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try {
                     stmt = connection.createStatement();
     
     
                    } catch (SQLException ex) {
                        Logger.getLogger(Paiement.class.getName()).log(Level.SEVERE, null, ex);
                        JOptionPane.showMessageDialog(null, ex.getMessage());
                    }
    Etc. pour tes autres try catch.

    3)
    N'utilise pas la concaténation de dates pour faire des requêtes sql, c'est foireux comme système. Ca dépends de la config de ton serveur db. Utilise un PreparedStatement avec setDate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      Date from = Date.valueOf(LocalDate.of(Integer.parseInt(aa),Integer.parseInt(M),Integer.parseInt(J)));
     Date to = Date.valueOf(LocalDate.of(Integer.parseInt(aa1),Integer.parseInt(M),Integer.parseInt(J)));
     
     String query1 = "select  SUM (paiement) AS mon_total from Achat WHERE Achat.date between ? and ?";
     
        try {
          PreparedStatement stmt = connection.prepareStatement(query1);
          stmt.setDate(1,from);
          stmt.setDate(2,to);
          rsltSet = stmt.executeQuery();

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [WD17] Requête SQL entre deux dates
    Par chrysaxel dans le forum WinDev
    Réponses: 9
    Dernier message: 27/01/2023, 23h40
  2. requete SQL entre deux dates
    Par Augustule dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/10/2013, 13h01
  3. [SQL] Nombre de jours entre deux dates
    Par azeggouar dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/08/2009, 16h07
  4. [SQL] obtenir la différence en jours entre deux dates sql
    Par toma03 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/06/2007, 12h20
  5. [SQL Server] Sélection entre deux dates
    Par Gabrielly dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/06/2006, 14h51

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