功能:
实现多条查询,条件有开始时间、结束时间、作者、类型等多个
不知道大家是怎么写的,我都是if else 判断然后写SQL语句
if(!type.equals(""))
{ sql=sql+" and type ='"+type+"'";
}
if(!name.equals(""))
{ sql=sql+" and name ='"+name+"'";
}在加上开始时间和结束时间就会有更多的if else 了我想使用PreparedStatement进行预编译的,如果使用上面的方法就很困难,有没有更优化的语句?
实现多条查询,条件有开始时间、结束时间、作者、类型等多个
不知道大家是怎么写的,我都是if else 判断然后写SQL语句
if(!type.equals(""))
{ sql=sql+" and type ='"+type+"'";
}
if(!name.equals(""))
{ sql=sql+" and name ='"+name+"'";
}在加上开始时间和结束时间就会有更多的if else 了我想使用PreparedStatement进行预编译的,如果使用上面的方法就很困难,有没有更优化的语句?
你可以吧SQL 语句用 STRINGBUFFER 来写 能比这个简单点??
具体的就是利用append方法往后面贴sql语句。楼主可以试试
//这里的rtype可以是 作者,类型,但你的url中,如果是点击的 "类型" 查询,URL后就要加 "rtype=类型",
如果是点击的 "作者" 查询,URL后就要加 "rtype=作者",以此类推sql = sql+"and "+rtype+"and"+rtype;
if(!type.equals(""))
{ sql=sql+" and type ='"+type+"'";
}
if(!name.equals(""))
{ sql=sql+" and name ='"+name+"'";
} 如果你的判断条件一样的话,就把这些放到一个函数中appendCondtion(StringBuffer sbSql, String name, String colName){
if(!name.equals(""))
{ sbSql.append(" and ").append(colName).append(" ='").append(name).append("'"); } }具体的你要测试
// 基本sql语句
StringBuffer sql = new StringBuffer("select * from table where 1=1 ");// 传过来的值是哪一个字段上的你应该知道
String param1 = "字段一的值";
String param2 = "字段二的值";
......// 存放字段的值
List params = new ArrayList();if(字段一的值!=null){
sql.append("and 字段一 = ? ");
params.add(字段一的值);
}
if(字段二的值!=null){
sql.append("and 字段二 like ? ");
params.add(字段二的值);
}// 查询的时候做个循环赋值
for(params){
preparedstatement.setObject(i+1,params.get(i));
}