日期:2014-05-18  浏览次数:21258 次

jdbc 的sql语句怎么写多条件查询
有个表 有id age name sex class等字段 
想做个jdbc的多条件查询 这些条件可以为空也可以不为空
简单的页面像这样:


用传统的
ps = con.prepareStatement(sql);
ps.setString(1, name);
这种方法 好像不行
求大大们指点啊
jdbc sql java dao

------解决方案--------------------
你的问题是可变参数的SQL组装。

这个要么就借助数据访问组件,比如Hibernate、MyBatis之类的;要么就只能自己写分支条件来处理。

另外如果是确定使用某种数据库(比如Oracle),或者使用了支持NamedParameterStatement,可以这样:

import oracle.jdbc.OraclePreparedStatement; // 这个是Oracle数据库的驱动才提供的

        String sql = "Select * From employees Where 1=1 And (:pName IS null OR first_name = :pName) And (:pSalary IS null OR salary = :pSalary)"; // 注意这句YD的SQL
        Connection con = openConnection(); // 数据库连接获取略
        OraclePreparedStatement stat = (OraclePreparedStatement) con.prepareStatement(sql); 
        stat.setObjectAtName("pName", null);
        stat.setObjectAtName("pSalary", 2500);
        ResultSet rs = stat.executeQuery();
        int cols = rs.getMetaData().getColumnCount();
        while (rs.next()) {
            for (int i = 1; i <= cols; i++) {
                System.out.print(rs.getString(i) + "\t");
            }
            System.out.println();
        }

不过总的来说还是建议老老实实用成熟的数据访问组件。
------解决方案--------------------
一个传参费这么大的劲?

Stringbuffer  sql="select * from student t ";
if( 字段中至少有一个不为空或者""){
 sql.append(" where ");
 list.add(val1);
}
if(id != null
------解决方案--------------------
 !"".equale(id)){
 sql.append(" t.id=?");
 list.add(val2);
}
if(name!=null 
------解决方案--------------------
 !"".equale(name)){
 sql.append( " t.name=? ");
 list.add(val3);
}
....
ps = con.prepareStatement(sql);
for (...list...){
    ps.setString(i, list.get(i));
}
....