Java - eviter la requête SQL dans le code
Dans mon code Java, j'ai quelque chose comme ceci :
ResultSet rs = statement.executeQuery(
"SELECT a,b,c FROM foo -- here starts the long query"+
" -- that is not yet finished " +
" -- that still has something to say... "+
" -- now the end !"
);
Je voudrais nettoyer mon code comme ceci :
ResultSet rs = statement.executeQuery(all_queries.getQuery("The very long one"));
J'ai lu que ResourceBundle
est pour la localisation. Donc, je ne pense pas que cela correspond à mon cas.
Ce qui devrait all_queries
être ?
EDIT :
La chose la plus importante pour moi est de nettoyer le code.
On pourrait peut-être supprimer l'ambiguïté de savoir si vous voulez éliminer le long des chaînes à partir de votre code entièrement (c'est à dire de les déplacer dans un fichier texte) ou tout simplement envie de revoir dans un simple et facile à gérer?
Le plus important pour moi est d'avoir un code propre.
Lié stackoverflow.com/questions/370818/... dans ma réponse ci-dessous. C'est probablement la même question.
Le plus important pour moi est d'avoir un code propre.
Lié stackoverflow.com/questions/370818/... dans ma réponse ci-dessous. C'est probablement la même question.
OriginalL'auteur Stephan | 2011-07-25
Vous devez vous connecter pour publier un commentaire.
Je voudrais le mettre dans un fichier avec une extension sql et de mettre en œuvre
Queries
comme:Utilisateur:
Bien sûr, c'est seulement une façon de le faire. Vous pouvez faire
Queries
retourStatement
, ou même utiliser un proxy dynamique pour le masquer derrière une simple interface Java (où proxy handler pourrait instruction de création, de définir les paramètres et exécuter la requête). Votre kilométrage peut varier.Avantage supplémentaire: sql fichiers ont la coloration de la syntaxe et sont façon plus facile à maintenir que des Chaînes de caractères en Java.
loadResource
?pourrait être basé sur
Queries.class.getResourceAsStream()
.Nous savons comment faire pour lire le fichier en Java. Pourrait être
FileInputStream
ougetClass().getResource()
.donc, cela aura pour effet de lire le même langage sql statique contenu à chaque fois qu'elle est appelée, ne faites pas ça! c'est probablement absolument la pire façon possible de le faire.
OriginalL'auteur Konrad Garus
Discbased point de vue
Car vous avez besoin d'une cartographie à partir d'une clé (nom) de la valeur (requête de longue durée), ce qui est réalisé à l'aide d'un dictionnaire (aka la carte, tableau associatif). discbased.
Garder votre configuration de votre code
Vous devez stocker votre configuration dans un fichier, séparé de votre code. Je recommande le .ini format de configuration, ce qui est très lisible, peut être divisé en sections, et a un bon analyseur pour presque n'importe quel langage de l'ordinateur.
Votre fichier de configuration ressemblera:
À l'aide de la
ini4j
module, l'obtention de votre requêtes serait aussi facile que de:il ne mentionne pas les fichiers de texte n'importe où.
comment pouvez-vous avoir des multi-lignes d'une requête ?
changé mon module de ini4j qui prend en charge multi-ligne valeurs.
solution élégante
OriginalL'auteur Adam Matan
Je voudrais juste faire
Externaliser vers un fichier texte comme un regroupement de ressources, mais je ne suis pas convaincu qu'il est nécessaire, ou même une bonne idée car elle pourrait conduire à une façon de penser que ce ne sont pas vraiment "code" et de là, les changements n'ont pas vraiment besoin de test.
plus le sql est du reste du "code", plus il est difficile de comprendre ce qui se passe sur...
Je trouve que mon SQL tend à être sécable à travers des lignes assez bien. Si "SELECT ...." + newline + "à PARTIR de ..." + newline + "OÙ" etc est tout à fait lisible.
tout est une question de goût. Bien nommé variables ont tendance à aider, et puis j'ai trouver mes chaînes de requête ensemble me permet de chose sur les requêtes en masse. J'aime mon code sur de courtes sections de l'esprit, comme les choses.
OriginalL'auteur djna
Une solution simple serait d'utiliser la normale fichier de propriétés, la réponse est à partir de Façon la plus propre à construire une chaîne SQL en Java
Seul problème, c'est que la nouvelle ligne doit être séparé par un "\"
par exemple,
ensuite, vous pouvez utiliser
Oui, "\" est toujours aussi moche, mais c'est plus propre et plus facile de format par rapport à l'utilisation de Java de la Chaîne /StringBuilder de concaténation, de l'omi.
Si vous voulez soutenir un format propre, peut-être que vous pouvez créer votre propre analyseur ou d'utiliser le format XML. Mais je pense que c'est inutile.
Hors sujet: Gotta love Groovy's multiligne Chaîne de caractères (sans vergogne):
OriginalL'auteur Manny
Une HashMap être simple, puisque vous voulez à la carte à partir d'un nom de requête/clé d'une requête/valeur. Toute Carte qu'il le ferait vraiment.
Vous pouvez utiliser un singleton si vous voulais le garder statique.
Ou vous pouvez simplement utiliser des Chaînes de caractères comme suggéré par djna:
ah, je vois d'où vous venez, maintenant, bien que l'OP est un peu ambigu s'il veut éliminer les longues requêtes entièrement à partir du code ou tout simplement à partir du point d'utilisation dans le code.
OriginalL'auteur Charles Goodwin
Peut-être que le problème est dans la structure de votre application. Ne vous séparez vos classes java dans "dao", "service", etc paquets?
Si vous organisez votre projet, vous n'aurez pas besoin d'appeler
ResultSet rs = statement.executeQuery( all_queries.getQuery("The very long one") )
, mais au lieu d'appelerResult res = dao.getSomethingYouNeed(param1, param2, ...);
getSomethingYouNeed
l'exécution de la requête ?Il dépend de la façon dont vous la met en œuvre. Vous pouvez inclure cette requête dans votre méthode et de faire la chose que vous avez décrits ci-dessus.
OriginalL'auteur Alexey Grigorev
Si nous écrire plusieurs requêtes dans un fichier texte (pas dans le fichier de propriétés), nous pouvons récupérer ou récupérer une requête unique de de tous.
OriginalL'auteur user2001125
MyBatis est-ce à la sortie de la boîte et fonctionne comme champion!
bien sûr, ici, une bonne page de loianegroner.com/2011/02/...
jetez un oeil à Contact.xml
Bien MyBatis a de nombreux avantages sur la plaine JDBC: SQL et Java code de la séparation, de Cache, les paramètres Nommés, de conception Simple, avec les génériques à l'aide de Cartographes, etc.
Merci de lire Comment puis-je écrire une bonne réponse? avant de tenter de répondre à plus de questions.
OriginalL'auteur Nestor Hernandez Loli