使用sql查询进行动态搜索

时间:2014-08-20 21:02:00

标签: java sql oracle dynamic-queries

我在我的应用程序中实现动态搜索,我有以下选项来构建查询。

  1. 来自用户输入的字符串连接
  2. 使用多个查询,并根据用户输入提取正确的查询
  3. 使用一个查询,使用通配符作为用户未提供的输入。
  4. 例如:

    select * from A,B where a.id like nvl( {input}, '%')
    and a.id = b.aid
    and b.value like nvl({input2},'%');
    

    因为id是主键,所以我在oracle中遇到以下错误。

2 个答案:

答案 0 :(得分:2)

首先,对于通配符搜索,您需要使用LIKE谓词,而不是=。其次,显然,您不能将LIKE谓词用于数值数据。您可以做的是:

select * from A,B where ( a.id = {input} or {input} is null )...

答案 1 :(得分:0)

一个简单的解决方案可能是:

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("' ");
}