Utilisation d'une instruction préparée et d'une variable bind By By en Java avec le pilote JDBC
Je suis en utilisant
- jdbcTemplate pour faire les connexions JDBC pour mySQL DB
- préparées pour me protéger autant que possible les attaques par injection SQL
- dans le besoin d'accepter les demandes de l'utilisateur de trier les données sur une douzaine de colonnes différentes
- la déclaration suivante
jdbcTemplate.query("SELECT * FROM TABLE1 ORDER BY ? ?", colName, sortOrder);
Bien sûr, cela ne fonctionne pas, parce que la variable liaisons ne sont pas censés pour spécifier les noms de colonne juste des valeurs de paramètre pour les expressions de la requête.
Donc...comment sont les gens à résoudre ce problème? Juste faire le tri dans du code Java semble comme une solution facile, mais depuis que je suis une variable chaîne de caractères de la colonne de tri, et une variable de me dire l'ordre de tri....c'est un vilain nombre de comparateur-les conditions de la couverture. Cela semble comme il devrait être un problème commun avec un modèle commun pour le résoudre...
source d'informationauteur Raevik
Vous devez vous connecter pour publier un commentaire.
Espaces réservés
?
peut être utilisé uniquement pour des valeurs de paramètre, mais pas avec la colonne et l'ordre de tri des directions. De sorte que le moyen standard pour ce faire, comme le fait par exemple ici est d'utiliser String#format() ou quelque chose de similaire pour ajouter votre nom de la colonne et la valeur de la commande à votre requête.Une autre option est d'utiliser Spring Data JPA où vous pouvez donner à votre méthode en argument une instance de type Tri qui peut contenir toutes les information nécessaire pour la base de données à trier.
Je voudrais simplement concaténer le nom de la colonne et de l'ordre de la requête SQL, mais seulement après
J'ai l'impression que c'est efficace par rapport à récupérer les résultats à la couche d'application et de tri ici.