A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 老成 初级黑马   /  2019-6-30 11:37  /  914 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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  数组的个数小于参数,没有第三个参数的赋值。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马