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

本文介绍了一种利用Java JDBC中的ResultSetMetaData和ParameterMetaData来处理数据库查询结果的方法。具体包括设置SQL参数、获取结果集元数据、解析列名及值,并将结果转化为Map集合存储的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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<Map<String, Object>> list = test1(sql, obj);
        //将list的存到request域中
        request.setAttribute("list", list);
        //转发到页面
        request.getRequestDispatcher("/index.jsp").forward(request, response);
    }
    private List<Map<String, Object>> test1(String sql, Object[] obj) {
        //创建一个Map类型的list集合
        List<Map<String,Object>> 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<String,Object> 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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值