数据库里面有一个Users表
表的字段为:
uname,age,sex,address
需要根据这些字段进行查询
如果什么条件都不输入则查询全部。
如只输了name只按uname进行查询
如输入了name 和age则按uname和age进行查询
依此类推
这样估计得判断10多次。。
如果字段再多些。。那判断起来非常的
所以在这里问一下有没有什么简单一点的办法。。
最好有个示例万分感谢

解决方案 »

  1.   

    一点也不难,String where = " where 1=1";
    if(name.length>0) where += " and uname='" + name + "'";
    if(age.length>0) where += " and age=" + age;
    if(address.length>0) where += " and address like '%" + address + "%'"
    //依此类推
    String sql = "select * from Users " + where
      

  2.   

    如果你页面放两个field分别为ageFrom 给 ageTo,用于搜索age的范围,则可以改良一下查询:
    String where = " where 1=1";
    if(name.length>0) where += " and uname='" + name + "'";if(ageFrom.length>0) 
       where += " and age>=" + ageFrom;if(ageTo.length>0) 
       where += " and age<=" + ageTo;if(address.length>0) where += " and address like '%" + address + "%'"
    //依此类推
    String sql = "select * from Users " + where
      

  3.   

    楼上的思路是正解。顶
    不过拼SQL要尽量避免
      

  4.   

    我提供一个思路:将输入的条件先封装到一个Bean,Bean的属性名和数据库字段保持一直(或者有一定的规范,能够从属性名获得数据库字段值),
    然后,通过类反射拿到这个Bean的所有属性,
    循环取Bean的属性值,如果不为null,则拼装Sql的where条件部分。这样,就避免了大量if的问题,表或者条件数量变了,只需要改变bean的定义即可。
      

  5.   


    实际上,我们查询很多时候未必用"等于" 比如上面的age字段,还有address字段等, 很难用一个bean来实现通用性查询! 因为不知道那个列应该用like等操作.