SQL, LIKE, UPPER et variable
Master Bean
-
fiu -
fiu -
Bonsoir,
pouvez-vous m'expliquer ce qui ne va pas dans cette portion de code ?
Plus précisément dans celle soulignée. Merci d'avance !
pouvez-vous m'expliquer ce qui ne va pas dans cette portion de code ?
Plus précisément dans celle soulignée. Merci d'avance !
public List<Video> rechercherParMotCle(String motCle) {
String requeteSQL = "select v from Video v where upper(v.titre) like upper('%"+motCle+"%') or upper(v.nomRealisateur) = upper('"+motCle+"') or upper(v.prenomRealisateur) = upper('"+motCle+"')";
List<Video> lesVideos = (List<Video>) em.createQuery(sql).getResultList();
return lesVideos;
}
A voir également:
- SQL, LIKE, UPPER et variable
- Voir like instagram - Guide
- Coco like - Accueil - Réseaux sociaux
- Logiciel sql - Télécharger - Bases de données
- Wawacity like - Accueil - Outils
- Supprimer like instagram - Forum Facebook
1 réponse
Salut,
primo, je suis pas à l'aise avec les constructions de requêtes au fil de l'eau. je préfère déclarer une constante qui contient le texte de la requête avec des paramètres (à la SQL, donc :PARAMETRE)
ça nous donne const requeteSQLn = "SELECT v FROM Video v WHERE UPPER(v.titre) LIKE UPPER('%:MOTCLE%') OR UPPER(v.nomRealisateur) = UPPER(':MOTCLE') OR UPPER(v.prenomRealisateur) = UPPER(':MOTCLE')" ; ensuite pour l'utiliser, je prends autant de replace que de paramètres différents. ici, il n'y a que :MOTCLE, ca va aller vite
requeteSQL = replace(requeteQSLn, ":MOTCLE", motCle)
secundo, je comprends pas pourquoi tu stockes ta requete SQL dans requeteSQL alors que par la suite tu ne t'en sers pas, tu ne te sers que de sql
tertio: ta requête devrait retourner la colonne v de Video. Si elle n'existe pas, tu devrais avoir une erreur. si tu voulais avoir toutes les colonnes de Video, c'est alors select v.* au lieu de select v qu'il eut fallut écrire.
Tu nous tiens au courant ?
primo, je suis pas à l'aise avec les constructions de requêtes au fil de l'eau. je préfère déclarer une constante qui contient le texte de la requête avec des paramètres (à la SQL, donc :PARAMETRE)
ça nous donne const requeteSQLn = "SELECT v FROM Video v WHERE UPPER(v.titre) LIKE UPPER('%:MOTCLE%') OR UPPER(v.nomRealisateur) = UPPER(':MOTCLE') OR UPPER(v.prenomRealisateur) = UPPER(':MOTCLE')" ; ensuite pour l'utiliser, je prends autant de replace que de paramètres différents. ici, il n'y a que :MOTCLE, ca va aller vite
requeteSQL = replace(requeteQSLn, ":MOTCLE", motCle)
secundo, je comprends pas pourquoi tu stockes ta requete SQL dans requeteSQL alors que par la suite tu ne t'en sers pas, tu ne te sers que de sql
tertio: ta requête devrait retourner la colonne v de Video. Si elle n'existe pas, tu devrais avoir une erreur. si tu voulais avoir toutes les colonnes de Video, c'est alors select v.* au lieu de select v qu'il eut fallut écrire.
Tu nous tiens au courant ?