ResultSetMetaData的使用

ResultSetMetaData能够通过ResultSet分析出结果集的元素。

 

ResultSetMetaData meta = rs.getMetaData();

通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等。

可以将ResultSet放入Map(key:列名 value:列值)

用反射ResultSetMetaData将查询结果读入对象中(简单的O/RMapping

    1)SQL语句中列别名和要读入的对象属性名一样;

    2)通过ResultSetMetaData获得结果列数和列别名;

    3)通过反射将对象的所有setXxx方法找到;

    4)3)找到的方法setXxx2)找到的列别名进行匹配(即方法中的xxx于列别名相等);

    5)由上一步找到的方法和列别名对应关系进行赋值

    Method.invoke(obj, rs.getObject(columnAliasName));

 

 

public class ResultSetMetaDataTest {

   

    public static void main(String[] args) throws SQLException {

       List<Map<String, Object>> datas = read("select id, name as n from user where id < 5");

       System.out.println(datas);

    }

 

    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));

              colNames[i - 1] = rsmd.getColumnLabel(i);//将列的名称放到一个数组当中去。

           }

           List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();

 

           while (rs.next()) {

              //每一行

              Map<String, Object> data = new HashMap<String, Object>();

              //data中的Key为列的名称,Value是些列的值

              for (int i = 0; i < colNames.length; i++) {

                  data.put(colNames[i], rs.getObject(colNames[i]));

              //将列的名称与列的值放到map当中去,每一行map中的元素大小就是列的数目

              }

              datas.add(data);//将此行放到List当中去。         }

           return datas;

       } finally {

           JdbcUtils.free(rs, ps, conn);

       }

    }

 

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值