bonsoir,
comment faire pour utiliser la fonction SUM(). est ce qu'il faut ajouter un package ou quoi ?
bonsoir,
comment faire pour utiliser la fonction SUM(). est ce qu'il faut ajouter un package ou quoi ?
Salut,
Il n'y a pas besoin de "package" ou bibliothèque spéciaux pour utiliser une fonction SQL : il suffit qu'elle soit supportée par le SGBD (ce qui est le cas avec la plupart des SGBDR à priori) et de l'utiliser dans une requête, comme n'importe quel autre mot clef SQL (SELECT, WHERE, ou quoi), genre SELECT SUM(nom_colonne) FROM table ou SELECT id, SUM(valeur) AS total FROM table GROUP BY id, etc. Tout ce qui concerne l'usage de cette fonction en particulier concerne SQL, pas Java.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
salut,
J'utilise DB Browser for sqlite (3.10). Lorsque j'ai utilisé la fonction sum dans une requête Insert, j'ai eu une erreur sur SUM (The method SUM(Object) is undefined for the type new ActionListener(){}).
PS: merci pour votre réponse
Montre le code que tu écris. Et la stacktrace complète de l'exception.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Voici une partie du code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 statement.executeUpdate("INSERT INTO Versement ( Nom , Prenom, Date ,Prix_du_logement, Somme_versee , Nom_du_projet, Versement_total) VALUES('" + nom.getText() +"','" +prenom.getText() +"','" +date.getText() + "'," + "(SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "')," + verse.getText()+ "," + " (SELECT Nom_du_projet FROM Client WHERE Nom='" + nom.getText()+ "' AND Prenom='" +prenom.getText() + "'),"+ SUM(Versement_total)+ ")"); JOptionPane.showMessageDialog(null, "Element ajouté");
Ce n'est pas un problème Java.
Ta requête SQL ne peut pas fonctionner comme cela.
1) on ne peut pas appeler une sous-requête (avec SELECT) quand on utilise VALUES ( ...
c'est beaucoup plus simple : on utilise SELECT à la place de VALUES quand on fait appel à des données venant d'une autre table
2) tu utilises SUM(Versement_total) qui est un agrégat sans préciser de quelle table il vient.
Bref, en SQL tout est faux.
De ce que je comprends de ta requête, tu veux insérer dans la table Versement
des informations issues de la table Client en ajoutant la date et SUM(Versement_total)
Dans un premier temps, on va mettre de côté SUM(Versement_total) car je ne sais pas pourquoi tu veux l'insérer ni de quelle table cela provient.
La requête correcte est :
Dans un second temps, on verra comment ajouter SUM(Versement_total)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 "INSERT INTO Versement ( Nom , Prenom, Date ,Prix_du_logement, Somme_versee , Nom_du_projet) SELECT Nom, Prenom,'" +date.getText() + "', Prix_du_logement, Nom_du_projet FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'"
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/
bonsoir,
ma requête fonctionne le plus normalement du monde en utilisant SELECT dans INSERT , le probléme se pose dans SUM (nom_du_colomne de la table) .
je ne sais pas comment y résoudre .
En fait, ce n'est pas standard mais certain SGBD peuvent en effet le supporter.
En revanche, le problème dans ton code au sujet de sum, c'est que cela doit faire partie de la requête. SUM c'est une fonction SQL, pas Java. Il faut que tu l’intègres dans la string constituant la requête (pour éviter ce genre de truc, on évite de faire des concaténations, on utilise le placeholder ? et on injecte les valeurs dans le PreparedStatement).
Tu as écrit :
Regarde bien où se trouvent les guillemets.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "' AND Prenom='" +prenom.getText() + "'),"+ SUM(Versement_total)+ ")");
Il faudrait faire :
Là, SUM est dans la requête. En revanche, je ne pense pas que ça fonctionnera non plus, parce que SUM c'est un agrégat sur une sélection. Alors que dans ta requête il correspondrait à la sum de ce qu'on est en train d'insérer et qui n'existe pas encore. Je ne pratique pas assez le SQL pour connaître la bonne solution, mais à mon avis, ça ne sera pas possible en une requête, ou alors il faudrait ajouter le montant du versement actuel avec le total des versements existant, quelque chose comme verse.getText()+" + SELECT SUM(Versement_total) FROM ...., à supposer que la syntaxe soit supportée et en utilisant des alias pour éviter la confusion avec l'insertion en cours.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "' AND Prenom='" +prenom.getText() + "'), SUM(Versement_total) )");
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Je pense que les guillemets ont été mal placés .
Merci bien
SUM(Versement_total) indique que l'on fait un total de plusieurs enregistrements.
Si Versement_total vient d'un seul enregistrement de la table Client (à savoir la fiche client), alors il est parfaitement inutile de faire un SUM.
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/
Non je veux faire la somme de plusieurs enregistrements
En ajoutant SUM(Somme_versee) j'ai cette erreur : No shuch column Somme_versee alors que la colonne existe dans ma table.
statement.executeUpdate("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_du_logement, Nom_du_projet, Versement_total) VALUES('" + nom.getText() +"','" +prenom.getText() +"','" +date.getText() + "'," + verse.getText() + ", " + "(SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "')," + " (SELECT Nom_du_projet FROM Client WHERE Nom='" + nom.getText()+ "' AND Prenom='" +prenom.getText() + "')," + "(SUM(Somme_versee))"+ ")");
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/
Jj'ai l'impression que c'est ça le but... une dénormalisation du prix total (d'ailleurs on dirait que (presque) tout est dénormalisé)... et du coup, ça serait logique de mettre à jour les enregistrements déjà existant, pour qu'ils contiennent tous le prix total et donc deux faire tout ça en deux requêtes : un insert pour le nouveau versement, un update pour mettre à jour la sum des versements dans le champ "total".
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
De ce que je comprends et après avoir regardé un peu la doc Sql lite, on doit pouvoir simplifier un peu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 String sql; sql = "INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee, Prix_du_logement, Nom_du_projet, Versement_total) " + "SELECT Nom, Prenom,'" +date.getText() + "'," + verse.getText() + ", Prix_du_logement, Nom_du_projet, " + "(SELECT SUM(Somme_versee) FROM Versement WHERE Nom='"+ nom.getText() + "' AND Prenom='"+ prenom.getText() +"') " + "FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'"; statement.executeUpdate(sql);
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/
J'ai fait ça code hier et au niveau du versement_total ça m'a donné "Versement_total m sauf qu'il n'a pas additionner celle que je venais d’insérer dans " verse.getText()
Code : Sélectionner tout - Visualiser dans une fenêtre à part statement.executeUpdate("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_du_logement, Nom_du_projet, Versement_total, Versement_restant) VALUES('" + nom.getText() +"','" +prenom.getText() +"','" +date.getText() + "'," + verse.getText() + ", " + "(SELECT Prix_du_logement FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "')," + " (SELECT Nom_du_projet FROM Client WHERE Nom='" + nom.getText()+ "' AND Prenom='" +prenom.getText() + "'), ((SELECT SUM(Somme_versee) FROM Versement WHERE Nom='"+ nom.getText() + "' AND Prenom='"+ prenom.getText() +"')," + "(SELECT (Prix_du_logement- Versement_total) FROM Versement WHERE Prenom='" +prenom.getText()+ "' AND Nom='" +nom.getText() + "')"+" )");
C'est normal, tu ne nous a pas dit que c'était ce que tu voulais ...
Cela pourrait marcher avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 String sql; sql = "INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee, Prix_du_logement, Nom_du_projet, Versement_total) " + "SELECT Nom, Prenom,'" +date.getText() + "'," + verse.getText() + ", Prix_du_logement, Nom_du_projet, " + "(SELECT SUM(Somme_versee) +" + verse.getText() + " FROM Versement WHERE Nom='"+ nom.getText() + "' AND Prenom='"+ prenom.getText() +"') " + "FROM Client WHERE Nom='"+ nom.getText() +"' AND Prenom='"+ prenom.getText() + "'"; statement.executeUpdate(sql);
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/
ça marche mnt merci beaucoup![]()
![]()
Oui mais ce n'est pas très fiable comme code.
Dès que tu auras un nom avec une apostrophe, un chiffre à virgule ou une date pas très bien formatée alors les problèmes vont recommencer.
Il faut que tu regardes du côté des PreparedStatement pour stabiliser un peu tout cela ...
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/
Effictivement, j'ai essayé d'insérer des noms avec des des apostrophes et ça ne marche pas.
merci pour la remarque
Partager