利用结果集元数据将查询结果封装成Map

来源:互联网 发布:音效下载 知乎 编辑:程序博客网 时间:2024/05/16 15:07
package cn.itcast.jdbc;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class ResultSetMetaDateTest {    public static void main(String[] args) throws SQLException {        System.out.println(read("select * from user where id<5"));    }    static List<Map<String, Object>> read(String sql) throws SQLException {        Connection conn = null;        PreparedStatement ps = null;        ResultSet rs = null;        try {            conn = JdbcUtils.getConnection();            ps = conn.prepareStatement(sql);            rs = ps.executeQuery();            ResultSetMetaData rsmd = rs.getMetaData();            int count = rsmd.getColumnCount();            String[]colNames=new String[count];            for(int i=1;i<=count;i++){//              System.out.print(rsmd.getColumnClassName(i)+"\t");//              System.out.print(rsmd.getColumnName(i)+"\t");//              System.out.println(rsmd.getColumnLabel(i));     //ColumnLabel是别名,没有别名时就是ColumnName                colNames[i-1]=rsmd.getColumnName(i);            }            List<Map<String, Object>>datas=new ArrayList<Map<String,Object>>();            while(rs.next()){                Map<String ,Object>data=new HashMap<String, Object>();                for(int i=0;i<colNames.length;i++){                    data.put(colNames[i], rs.getObject(colNames[i]));                }                datas.add(data);            }            return datas;        } finally {            JdbcUtils.free(rs, ps, conn);        }    }}
0 0