Простой запрос с переменными параметрами - PullRequest
1 голос
/ 24 декабря 2011

У меня есть три запроса, которые я хотел бы объединить в один запрос, который может принимать переменную длину WHERE аргументов; Я не могу вспомнить на всю жизнь, как это сделать.

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 ]

1 голос
/ 24 декабря 2011

Все три запроса выбирают одинаковые столбцы из одной и той же таблицы, поэтому их объединение можно легко выполнить одним оператором:

SELECT columnOne, columnTwo, columnThree 
  FROM tableOne 
 WHERE columnOne = ?
    or columnTwo = ?
    or (columnOne = ? AND columnTwo = ?)
0 голосов
/ 29 декабря 2011

Ответив на мой собственный вопрос, не стесняйтесь задавать вопросы, является ли это плохой практикой или нет.

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); 
...