mysql查询语句的拼写:当不确定查询语句参数有几个,而且查询条件较多时,如何拼写sql语句?[Java] 纯文本查看 复制代码 //在js中封装查询条件
req.setCharacterEncoding("utf-8");
Map<String, String[]> parameterMap = req.getParameterMap();
//在DaoImpl类中解析条件
String sql = "select * from tab where 1=1 ";
//用于拼接的StringBuilder
StringBuilder sb = new StringBuilder();
sb.append(sql);
//keyset是条件名称集合
Set<String> keySet = map.keySet();
//list是条件值的集合
List<Object> list= new ArrayList<Object>();
for (String key : keySet) {
//当条件有参数时
String value = map.get(key);
if(value != null && !"".equals(value)){
//拼接查询语句,注意查询条件的类型
sb.append(" and "+key+"=? ");
list.add(value);
} else if ("name".equals(value)) {
//name条件的模糊查询
sb.append(" and "+key+"like ? ");
list.add("%"+value+"%");
}
//为了应对所有条件都没有参数的情况,可以加一个条件
sb.append("and 1 = ?");
list.add(1);
}
//参数的类型是数组
List<Object> query = template.query(sql, new BeanPropertyRowMapper<Object>(Object.class), list.toArray());
return query;
关于异常的处理:
(大概这样的报错)3 > number of parameters ,which is 2 需要两个参数(sql中有两个?),list.toArray()是一个有三个参数的数组
(大概这样的报错)no spelified for 3 数组的个数小于参数,没有第三个参数的赋值。
|