Tu nous explique comment tu stocke un mois dans un type char?? Tu leur donne des lettres de A à L ?
Version imprimable
Tu nous explique comment tu stocke un mois dans un type char?? Tu leur donne des lettres de A à L ?
Pardon c'est pas pour mois mais pour une autre valeur. Mais je vois pas quand même comment on fait
Le type char de base de données, c'est un type String en fait (on écrit char(50) par exemple, pour avoir 50 caractères). Donc on récupère la valeur par getString(). Si le type est char(1), on pourrait récupérer la valeur de type char par getString().charAt(0), mais, premièrement, je ne vois pas trop à quoi ça servirait (de le gérer en char, ou Character, plutôt qu'en String), deuxièmement, il faudrait qu'on soit sûr qu'il y ait toujours un caractère (un au moins), et troisièmement à la moindre évolution du paramétrage de la base, on serait obligé de modifier le code, parce qu'un char ne suffirait plus.
Merci
J'ai cette requete qui ne passe pas en java alors qu'elle passe très bien dans mysql
Sa me retourne rien en java alors que dans mysql sa me retourne bien un enregistrementCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Date dateJour = new Date(); SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); String dateJours = formater.format(dateJour); List<FicheFrais> lesFicheFrais = new ArrayList<FicheFrais>(); try{ statement = unAcces.connexionBdd().createStatement(); resultat = statement .executeQuery("SELECT FicheFrais.id AS idFiche, Users.id AS idUser, Users.nom AS nom, prenom, fonction, mois, annee, statut, CAST(SUM(coutTotal) + SUM(montantTTC) AS DECIMAL (15,2)) AS total, CAST(SUM(montantTVA) AS DECIMAL (15,2)) AS totalTVA" + "FROM DetailFiche" + "LEFT JOIN FicheFrais ON FicheFrais.id = DetailFiche.ficheFrais_id" + "LEFT JOIN Users ON Users.id = FicheFrais.users_id" + "WHERE statut = 'Validé' AND '"+dateJours+"'< DATE_ADD(dateValidation, INTERVAL 1 MONTH)" + "GROUP BY idFiche, idUser" + "ORDER BY annee, mois DESC");
Il n'y a pas de requête SQL et de requête Java : la requête que tu envoies via executeQuery en java est une requête SQL. Aussi faut-il exactement tester la même chose, c'est-à-dire la chaîne exacte que tu passes en argument de la méthode, pour comparer. C'est probablement à cause de la date mise "en dur", avec un format personnalisé, qui ne passe pas...
Pour éviter les déconvenues dues au formatage, et éviter d'autres problèmes, utilises plutôt un PreparedStatement, ce qui te permettra de passer la date en type java, sans avoir à te préoccuper de la forme que le SGBD s'attend à avoir. Sinon, il faut respecter cette forme très précisément.
EDIT : ce n'est peut être pas la date finalement, mais ça n'empêche pas d'utiliser quand même un PreparedStatement. Traces la chaîne exacte que tu envoies en requête SQL (avec System.out.println()) et tu verras tout de suite ce qui ne va pas (pour te mettre sur la voie, il manque des espaces quelque part à priori). Je suis (à moitié) étonné d'ailleurs que tu n'aies pas une SQLException : ne voyant pas le contenu du catch, je suppose que tu ne traces pas cette exception, donc tu ne voies pas que ta requête plante.
Sa fonctionne!!!
Il manquait les espaces après les guillemets
Ainsi, pas besoin de chipoter les dates et le formatage. De plus, rien ne te garantis que le serveur mysql utilise le format que tu as passé en paramètres (yyyy-MM-dd) car ce format dépend d'information de Locale liée à la connection DB et ça peut très bien êter différente entre JDBC et la ligne de commande mysql!Code:
1
2
3
4
5
6
7
8
9
10
11
12 Date dateJour = new Date(); List<FicheFrais> lesFicheFrais = new ArrayList<FicheFrais>(); try{ PreparedStatement ps = unAcces.connexionBdd().prepareStatement("SELECT FicheFrais.id AS idFiche, Users.id AS idUser, Users.nom AS nom, prenom, fonction, mois, annee, statut, CAST(SUM(coutTotal) + SUM(montantTTC) AS DECIMAL (15,2)) AS total, CAST(SUM(montantTVA) AS DECIMAL (15,2)) AS totalTVA" + " FROM DetailFiche" + " LEFT JOIN FicheFrais ON FicheFrais.id = DetailFiche.ficheFrais_id" + " LEFT JOIN Users ON Users.id = FicheFrais.users_id" + " WHERE statut = 'Validé' AND ? < DATE_ADD(dateValidation, INTERVAL 1 MONTH)" + " GROUP BY idFiche, idUser" + " ORDER BY annee, mois DESC"); ps.setDate(1,dateJour); resultat = ps.executeQuery(
Enfin, ton erreur de départ, c'est que tu as oublié des espaces entre les mots clés => syntax error en SQL. Si tu ne vois pas le message, c'est surement qu'après ce try{ t'as un catch à la con qui ne fais pas son boulot, je parie pour le catch vide!
EDIT: grillé :)