黑马程序员技术交流社区

标题: 【石家庄校区】学习经历 [打印本页]

作者: 老成    时间: 2019-6-30 11:37
标题: 【石家庄校区】学习经历
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  数组的个数小于参数,没有第三个参数的赋值。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2