关于六种条件组合查询,实在改的不知道怎么改了
我发的帖子就一个人回答 所以再发 哎
本人菜鸟,学web不到二十天,现在做一个项目
前台网页六种条件随意组合查询,所以在传入sql语句的时候我是这样写的
String sql0 = "select * from Daily where writer='" + dailywriter + "'";
String sql1 = (start_time == null||start_time=="") ? "":" and datetime>='" + start_time+ "'" ;
String sql2 = (end_time.equals("")==true) ? (" and datetime<='" + end_time + "'"): "";
String sql3 = ((proname != null)==true) ? (" and pro_ID='" + proname + "'" ): "";
String sql4 = (prpname != null) ? (" and PRP_ab='" + prpname + "'" ): "";
String sql5 = statement != null? (" and statement='" + statement + "'"): "";
String sql6 = task != "" ? (" and task='" + task + "'" ): "";
String sql = sql0 + sql1 + sql2 + sql3 + sql4 + sql5 + sql6;
如上,writer是登录人的名字,成功的在session里取值没问题,可是下面的sql1到sql6 从前台表单页面取值,不为空,都可以取出,为空的时候,赋值的时候却没有赋予""空制符串
本来 sql语句都是写成String sql4 = (prpname != null) ? (" and PRP_ab='" + prpname + "'" ): "";这种形式的,但是因为不成功,就针对上面每个都换成不同的表达式形式,
可是还是不能付空字符串,下面是控制台检验的答应语句:
and datetime>=''
and datetime<=''
and pro_ID=''
and PRP_ab=''
and statement=''
and task=''
select * from Daily where writer='a1' and datetime>='' and datetime<='' and pro_ID='' and PRP_ab='' and statement='' and task=''
前台用于测试的简易页面的文本框的name值都与这个对应,不会有错,但填写的时候,都可以取值,但是不填写的时候,却不能赋空字符串
<form action="QueryDailyAction" method="post">
start_time <input type="text" name="start_time"/><br/>
end_time <input type="text" name="end_time"/><br/>
task <input type="text" name="task"/><br/>
proname <input type="text" name="proname"/><br/>
prpname <input type="text" name="prpname"/><br/>
statement <input type="text" name="statement"/><br/>
<input type="submit" value="查询"/><br/>
</form>
------解决方案--------------------
String sql4 = (prpname != null) ? (" and PRP_ab='" + prpname + "'" ): "";
根据控制台打出的内容,可以看错
prpname!=null这个判断执行的是 (" and PRP_ab='" + prpname + "'" )
所以了你判断的时候出现了问题
取得prpname 值的时候部位null 也可以为"" 的 "" 代表的是空字符串!
你把条件都改成
String sql1 = (start_time != null && !start_time.equals("")) ? " and datetime>='" + start_time+ "'":"" ;