Mon approche préférée pour créer des requêtes dynamiques complexes est:
- Énumérer toutes les requêtes possibles (c.-à-d. modèles de requête) requis. Cela me permet de voir les points communs et de trouver des modèles pour lesquels un code générique peut être écrit.
- Générez chaque partie de l'instruction SQL séparément, puis concaténéz à la toute fin. par exemple. (Ce ne vise pas à être le code de travail, juste une esquisse d'une idée):
<pseudocode>
select_clause = 'SELECT '
from_clause = 'FROM '
where_clause = 'WHERE '
orderby_clause = 'ORDER BY '
if [query on person] then
select_clause += 'p.name, p.dob '
from_clause += 'person p '
orderby_clause += 'p.name '
if [query on address] then
select_clause += 'a.address_text '
from_clause += ', address a '
where_clause += 'p.address_id = a.id AND a.id=:p1 '
else
where_clause += 'p.id=:p1'
end if
end if
sql_stmt = select_clause + from_clause + where_clause + orderby_clause + ';'
</pseudocode >
Ainsi, le code ci-dessus peut produire la les énoncés suivants:
SELECT p.name, p.dob
FROM person p
WHERE p.id=:p1
ORDER BY p.name;
SELECT p.name, p.dob, a.address_text
FROM person p, address a
WHERE p.address_id = a.id AND a.id=:p1
ORDER BY p.name;
Avec plus de paramètres Cette approche signifie que je n'ai pas à faire face à un nombre croissant de combinaisons possibles de critères.
StringBuffer est votre ami !!! :( –
vous voulez dire stringbuilder ?? je suis déjà capable d'assembler des requêtes simples ... le problème est celui avec les conditions de jointure ... –
Pouvez-vous donner un exemple? –