我正在我的应用程序中实现动态搜索,我有以下选项来构建查询。
- 来自用户输入的字符串连接
- 使用多个查询,并根据用户输入拉出正确的查询
- 使用一个查询,对用户未提供的输入使用通配符。
例如:
select * from A,B where a.id like nvl( {input}, '%')
and a.id = b.aid
and b.value like nvl({input2},'%');
因为 id 是主键,所以我在尝试时在 oracle 中收到以下错误。
我正在我的应用程序中实现动态搜索,我有以下选项来构建查询。
例如:
select * from A,B where a.id like nvl( {input}, '%')
and a.id = b.aid
and b.value like nvl({input2},'%');
因为 id 是主键,所以我在尝试时在 oracle 中收到以下错误。
首先,对于通配符搜索,您需要使用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("' ");
}