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

用传统的
求大大们指点啊
------解决方案--------------------
你的问题是可变参数的SQL组装。
这个要么就借助数据访问组件,比如Hibernate、MyBatis之类的;要么就只能自己写分支条件来处理。
另外如果是确定使用某种数据库(比如Oracle),或者使用了支持NamedParameterStatement,可以这样:
不过总的来说还是建议老老实实用成熟的数据访问组件。
------解决方案--------------------
一个传参费这么大的劲?
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));
}
....
------解决方案--------------------
创建个list 比如
最后设置参数的时候
有个表 有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));
}
....
------解决方案--------------------
创建个list 比如
List<object> param = new ArrayList<Object>();
if(id != null
------解决方案--------------------
!"".equale(id)){
sql.append(" t.id=?");
param.add(id);
}
最后设置参数的时候
for(int i =0; i < param.size(); i ++) {
ps.setString(i + 1, param.get(i));
}