`

ResultSetMetaData的使用

SQL 
阅读更多

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

       }

    }

 

}

 

分享到:
评论

相关推荐

    Java-JDBC【之】数据类型、封装JDBCUtil、封装通用增删改、ResultSet与ResultSetMetaData

    Java-JDBC【之】数据类型、封装JDBCUtil、封装通用增删改、ResultSet与ResultSetMetaData、查询结果集映射Map与ListMap 1.数据类型 2.封装通用增删改 2.1.封装JDBCUtil 2.2.封装Dao通用增删改 2.3.测试 3.ResultSet...

    获得结果集的字段名称_ResultSet的属性要调用ResultSetMetaData的方法

    获得结果集的字段名称_ResultSet的属性要调用ResultSetMetaData的方法

    Mybatis通用操作数据库方法类总结

    在项目中用到myBatis作为orm框架,与spring结合,通常的... import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; i

    java读取table列名

    java使用ResultSetMetaData 读取table的列名

    Java数据库编程宝典2

    10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性需求 11.3 设计数据库 11.3.1 处理会员登录 11.3.2 会员注册 11.3.3 数据...

    Java数据库编程宝典4

    10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性需求 11.3 设计数据库 11.3.1 处理会员登录 11.3.2 会员注册 11.3.3 数据...

    Java数据库编程宝典1

    10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性需求 11.3 设计数据库 11.3.1 处理会员登录 11.3.2 会员注册 11.3.3 数据...

    Java数据库编程宝典3

    10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性需求 11.3 设计数据库 11.3.1 处理会员登录 11.3.2 会员注册 11.3.3 数据...

    orm-benchmark:比较不同orm解决方案与simpleflatmapper的基准

    迁移到具有更好结构的 。基准测试比较不同orm解决方案与simpleflatmapper的基准我们运行... SFM Static使用预定义的列列表SFM Dynamic将使用ResultSetMetadata SFM Dynamic NoASM将使用ResultSetMetadata但不使用asm

    JDBC工具类(针对mySQL)

    旨在方便用户将数据库的内容转化为Vector、ArrayList容器的操作过程,此类中提供了多种方法从而简化了对ResultSet结果集的转化成本,结合系统提供的ResultSetMetaData类实现了通过结果集查询表列数目、名称、属性...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    Java_JDBC由浅入深

    15.1.1 ResultSetMetaData演示 88 15.1.2解决多行记录的问题 89 15.1.3 Map结果集的封装 90 15.2 将结果集封装为对象 91 15.2.1 user表POJO的编写 91 15.2.2 Bean结果集的封装 92 15.3 将结果集封装为List 94 15.4 ...

    表字段描述依赖包

    表字段描述依赖包 ormlite 之ResultSetMetaData

    Rueckwaertssalto

    ### 任务 ## JDBC: Backward flip 创建一个 Java 程序,在命令行上接受连接参数和数据库名称,并将数据库结构输出为 EER 图和关系模型(在合适格式的文件中,例如 PNG为 EER 和 TXT 为 RM) 使用 ResultSetMetaData ...

    rueckwaertssalto

    卡里克/霍恩沃特创建一个 Java 程序,该程序在命令行上接受连接参数和数据库名称,并将数据库的结构输出为 EER 图和关系模型(在合适格式的文件中,例如 EER 为 PNG,RM 为 TXT) 为此使用 ResultSetMetaData 接口,...

    ResultSet的属性

    获得结果集的字段名称,ResultSet的属性要调用ResultSetMetaData的方法

    JDBCDriver最齐驱动包

    包括Oracle,mysql驱动,各种驱动池、dbutils、ResultSetMetaData配置对象的属性等

    各种数据库的驱动程序Driver

    dbutils、mysql驱动、oracle驱动、postgresql驱动、ResultSetMetaData配置对象的属性、数据库连接池驱动

    jtdsJDBC Driver

    JTDS完全与JDBC 3.0兼容,支持只向前的,和可滚动/可更新的结果集(ResultSets)中并行(完全独立)语句,并且可实施所有databasemetadata和resultsetmetadata方法。 文件有说明spring+hibernate+c3p0+jtds的配置

    JDBC笔记 JDBC笔记

    一、概述: JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库...java.sql.ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对象。

Global site tag (gtag.js) - Google Analytics