本人菜鸟,学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=''

解决方案 »

  1.   

    我测试了一下,应该是你前台的问题
    public class Test {
    public static void main(String[] args) {
    String dailywriter="a";
    String start_time="b";
    String end_time="c";
    String proname="d";
    String statement="";
    String task="f";
    String prpname=null;
    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;
    System.out.println(sql);
    }}
      

  2.   

    输出是 这样的
    select * from Daily where writer='a' and datetime>='b' and pro_ID='d' and statement='' and task='f'
      

  3.   

    前台应该没问题啊 如果填写值的时候,都可以取到,但是不填写的时候,就如上面的情况所示,打印语句显示and datetime>='',但是三目运算符不给判断
    <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>
    这是前台有关的表单页面  
    现在我怀疑的就是 当前台输入为空的时候,传到action的值不能用!=null判断吗?
    可是我上面试了各种不同的方式,括号也加上或去掉,最后的sql语句还是如此
      

  4.   

    为什么不用动态或者StringBuffer呢?
      

  5.   

      通过表单传到服务端的值不可能为null的,只会是空字符串。所以你用null判断就不正确了.
      

  6.   

     写时,先判断字段,如果取得的值为空,则不管,如果不为空时,才给它拼到 SQL 中就行了