利用结果集元数据将查询对象封装成map

@WebServlet("/ResultSetMetaDataTest")
public class ResultSetMetaDataTest extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建sql语句
        String sql = "select * from user where id;
        //创建一个数组用来存放sql中?的值
        Object obj[] = new Object[]{1020};
        //调用test1方法,得到list集合
        List> list = test1(sql, obj);
        //将list的存到request域中
        request.setAttribute("list", list);
        //转发到页面
        request.getRequestDispatcher("/index.jsp").forward(request, response);
    }
    private List> test1(String sql, Object[] obj) {
        //创建一个Map类型的list集合
        List> list = new ArrayList<>();
        Connection conn=null;
        PreparedStatement ps =null;
        ResultSet rs = null;
        JDBCUtils utils =JDBCUtils.getInstance();
        try {
            conn = utils.getConnection();
            ps=conn.prepareStatement(sql);
            //得到参数元数据
            ParameterMetaData pmd = ps.getParameterMetaData();
            //得带参数个数
            int parameterCount = pmd.getParameterCount();
            for(int i=1;i<=parameterCount;i++){
                //将数组的元素赋值给对应的问号
                ps.setObject(i, obj[i-1]);
            }
            rs= ps.executeQuery();
            //得到结果集元数据
            ResultSetMetaData rsmd = rs.getMetaData();
            //得到结果集的列的数量
            int count = rsmd.getColumnCount();
            while(rs.next()){
                //创建一个map集合
                Map map = new HashMap<>();
                //遍历所有的列
                for(int i=1;i<=count;i++){
                    //得到列的名称
                    String key = rsmd.getColumnName(i);
                    //得到这个列的值
                    Object value = rs.getObject(key);
                    //以键值对的形式存放
                    map.put(key, value);
                }
                //将map添加到list集合中
                list.add(map);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            utils.free(conn, ps, rs);
        }
        return list;
    }
}

你可能感兴趣的:(jdbc)