2014-09-13 10:43题主

关于复合查询的问题

看过例子单条件的查询做法,已经做了一遍。
想问支不支持多条件查询时?
就是在where 1=1 后面拼接条件的,参数为空就不拼接这个条件
2014-09-15 13:57#1
支持的。关于查询,这个属于数据库的范畴。
目前所有数据库都支持多条件查询,具体请参考customer示例。
2014-09-15 15:55#2
customer的例子,还有看过别人都是,多条件直接写进sql里的
我想问是,有没有办法拼接sql。
因为直接写进去,如果有一个条件为空,刚好那个条件的那列数据也为空
使用like '%%',就查不出来了,like '%%'只能查这列为非空的。
2014-09-16 17:46#3
可以拼写,可以在serverScript或java中设置变量:

然后设置SQL属性:

或者直接在serverScript或java中编写代码:

这些是等效的。
2014-09-18 17:42#4

Wb.load(store1,{field:'foo',field2:123});
这里的filed 是不是Attribute
我这里的'foo' 可不可以写成 'and emp_name like '%' + Wb.getValue(EMP_NAME) + '%''
我想写一个加载store1 ,但是要判断,如果控件EMP_NAME为空
那么我这field参数就为空的JS,求帮助,谢谢

2014-09-18 18:28#5
楼上的写法这是要生成SQL注入的节奏
前台只管传参,SQL可在后台的initScript中拼写
2014-09-19 10:24#6

我用这个工具还没写过后台,想知道前台
写request.setAttribute('wheresql','foo=bar');
是不是在window的clickOK里写?
我试了下,但是这个wheresql的值好像传不到
store1的url指向的页面的dataProvider1里面

2014-09-19 20:10#7
楼主如果想直接从前台直接传输sql语句是可以的
你可以
var sql = 'and name = ........ and age =.........';
Wb.load(store1,{filed,sql});
或者store1.params.field = sql;
store1.load();
都可以把你这半条sql语句传到后台,sql语句里直接引用{#field#}即可

但是更好更准确地方法是,不要传输sql语句,传输值就可以了
后台var name = request.getParameter('field');
判断是否为空,再拼接sql语句,这些因为是java代码必须卸载serverScript中
把拼接的sql语句setAttribute 同样用{##}引用

request,response是server端最基本的知识,建议楼主先学习下基本的servlet知识
2014-09-23 10:54#8
谢谢,wych,已经按照你的第一种方解决了。

返回开发者社区