情况是这样的
我这里有个sql语句:select * from table where a=? /~and b=?~/ /~and c=?~/
java调用这条sql的时候条件b、c可能有值也可能没值,例如b有值,c没值,则sql语句变为select * from table where a=? and b=?
我应该怎么去实现这样的操作? 麻烦给个思路就行! 谢谢!!

解决方案 »

  1.   

    如果只是得到这个sql语句的话,很简单,但是得到之后呢,不是还有占位符吗?还得根据占位符设置相应的值才行!~
    StringBuilder sb = new StringBuilder("select * from table where a=? ");
    if(b != null || !"".equals(b)){
         sb.append(" and b=? ");
    }
    if(c != null || !"".equals(c)){
         sb.append(" and c=? ");
    }
      

  2.   

    你的题目有歧义,可以理解为b和c是java里有的变量,那么,那摸:String sql="select * from table where a=?" + null==b||"".equals(b)?"":" and b=?" + null==c||"".equals(c)?"":" and c=?";不过我感觉你是第二种意思,就是说你设计的数据库有问题,要么b字段有值,要么c字段有值。如是值是字符串也好办,你可以将a和b字段拼接起来,因为其中某一个没有值,另一个就有,所以这俩字段拼接起来就是有值的那个。String sql="select * from table where a=? and trim(b)||trim(c)=?";其实最简单的方法就是把后一个and改成or,只要其中有一个值就对了,另一个不影响:String sql = "select * from table where a=? and (b=? or c=?)";当然你的说法都还有歧义,不知道我理解对没有。
      

  3.   

    这个貌似没什么难度啦,就是判断一下,拼接sql语句,楼上的都写的很清楚
    难后执行sql语句的时候要传参数,个数有可能是两个或者3个,建议把参数整成数组,
    然后在dao里接收的时候根据数组个数来传参