`

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对象的getMetaData()方法,可以获取ResultSetMetaData对象,然后使用该对象的方法来获取结果集的字段名称和其他信息。 下面是一些常用的ResultSetMetaData方法: 1. getColumnCount():返回...

    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 数据...

    jsp数据库脱裤脚本,脱各种数据库

    12. 使用ResultSetMetaData对象可以获取查询结果的元数据,例如列名、数据类型等。 13. 在JSP中,使用try-catch语句可以捕获异常,例如数据库连接异常。 14. 使用finally语句可以确保资源的释放,例如关闭数据库...

    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

    Spring jdbcTemplate调用Oracle存储过程返回List集合

    在此文档中,我们将介绍如何使用 Spring jdbcTemplate 调用 Oracle 存储过程返回 List 集合。 Oracle 存储过程 ------------- 在 Oracle 数据库中,存储过程是一种可以被调用执行的数据库对象。存储过程可以实现...

    Rueckwaertssalto

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

    rueckwaertssalto

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

    ResultSet的属性

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

    如何在Servlet中连接数据库

    ResultSetMetaData rsmd = results.getMetaData(); int numCols = rsmd.getColumnCount(); int i, rowcount = 0; // 获取列头信息 for (i = 1; i ; i++) { if (i &gt; 1) buf.append(","); buf.append(rsmd....

    JDBCDriver最齐驱动包

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

Global site tag (gtag.js) - Google Analytics