SQL, LIKE, UPPER et variable

Fermé
Master Bean - 22 mars 2010 à 22:40
 fiu - 23 mars 2010 à 01:28
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 !

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:

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 ?
0