2011-12-23 5 views
1

J'ai trois requêtes que je voudrais consolider en une requête qui peut accepter une longueur variable de WHERE arguments; Je ne peux pas me rappeler pour la vie de moi comment faire ceci.Requête simple avec paramètres variables

PreparedStatement queryOne = connection.prepareStatement 
("SELECT columnOne, columnTwo, columnThree FROM tableOne WHERE columnOne = ?;"); 

PreparedStatement queryTwo = connection.prepareStatement 
("SELECT columnOne, columnTwo, columnThree FROM tableOne WHERE columnTwo = ?;"); 

PreparedStatement queryThree = connection.prepareStatement 
("SELECT columnOne, columnTwo, columnThree FROM tableOne WHERE columnOne = ? AND columnTwo = ?;"); 
+2

Comment voulez-vous dire "consolider"? Voulez-vous une requête qui renvoie l'union des résultats, l'intersection des résultats, ou autre chose? –

+0

Je voudrais créer un seul PreparedStatement qui accepte une longueur variable d'instructions WHERE. –

+0

Oui, si vous voulez dire "consolider", UNION pourrait aider. –

Répondre

0

a répondu à ma propre question, ne hésitez pas à carillon si cette est une mauvaise pratique ou non.

String columnOne = getValue(); 
String columnTwo = getValue(); 
String queryString = "SELECT columnOne, columnTwo, columnThree FROM tableOne" 

if (columnOne != null && columnTwo != null) 
    queryString = queryString + "WHERE columnOne = ? AND columnTwo = ?" 
else if (columnOne != null) 
    queryString = queryString + "WHERE columnOne = ?" 
else if (columnTwo != null) 
    queryString = queryString + "WHERE columnTwo = ?" 

PreparedStatement query = connection.prepareStatement(queryString); 
1

Les trois requêtes sélectionner les mêmes colonnes de la même table, de sorte que leur union peut être facilement fait dans une déclaration:

SELECT columnOne, columnTwo, columnThree 
    FROM tableOne 
WHERE columnOne = ? 
    or columnTwo = ? 
    or (columnOne = ? AND columnTwo = ?) 
+0

Si j'attribue seulement une valeur au premier? L'instruction va-t-elle s'exécuter correctement? –

+0

@Dennis - Non. Vous devez fournir une valeur pour chacun des espaces réservés. –

+2

jamais à vérifier la troisième condition, parce que cela se chevauchent avec le premier et le second, – Jhonathan

Questions connexes