日期:2014-05-17  浏览次数:20708 次

关于六种条件组合查询,实在改的不知道怎么改了
我发的帖子就一个人回答 所以再发 哎
本人菜鸟,学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+ "'":"" ;