Динамический поиск с использованием SQL-запросов
Я реализую динамический поиск в моем приложении, у меня есть следующие варианты для создания запроса.
- Конкатенация строк из пользовательского ввода
- Используйте несколько запросов и извлеките правильный запрос на основе ввода пользователя
- Используйте один запрос, используйте подстановочные знаки для входных данных, не предоставленных пользователем.
например:
select * from A,B where a.id like nvl( {input}, '%')
and a.id = b.aid
and b.value like nvl({input2},'%');
Поскольку id является первичным ключом, я получаю следующую ошибку в оракуле при попытке.
2 ответа
Во-первых, для поиска по шаблону вам нужно использовать LIKE
предикат, а не =
, Во-вторых, вы не можете использовать LIKE
предикат для числовых данных, очевидно. Что вы можете сделать, это:
select * from A,B where ( a.id = {input} or {input} is null )...
Простое решение может быть:
StringBuffer sqlSB = new StringBuffer("select * from A,B where a.id = b.aid ");
if(input!=null&&!input.equals("")){
sqlSB.append(" and a.id = ").append(input);
}
if(input2!=null&&!input2.equals("")){
sqlSB.append(" and b.value = '").append(input2).append("' ");
}