`

jdbc的ResultSetMetaData

    博客分类:
  • Java
阅读更多
ResultSetMetaData能够通过ResultSet分析出结果集的元素。
 

ResultSetMetaData meta = rs.getMetaData();

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

可以将ResultSet放入Map(key:列名 value:列值)。
用反射ResultSetMetaData将查询结果读入对象中(简单的O/RMapping)

    1)让SQL语句中列别名和要读入的对象属性名一样;
    2)通过ResultSetMetaData获得结果列数和列别名;
    3)通过反射将对象的所有setXxx方法找到;

    4)将3)找到的方法setXxx和2)找到的列别名进行匹配(即方法中的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...

    Java数据库编程宝典2

    6.6 JDBC ResultSetMetaData 6.7 小结 第7章 使用SQL查询检索数据 7.1 SELECT语句 7.1.1 使用WHERE子句 7.1.2 格式化SQL命令 7.2 在较复杂的WHRER子句中使用运算符 7.2.1 DISTINCT运算符 7.2.2 TOP运算符...

    Java数据库编程宝典4

    6.6 JDBC ResultSetMetaData 6.7 小结 第7章 使用SQL查询检索数据 7.1 SELECT语句 7.1.1 使用WHERE子句 7.1.2 格式化SQL命令 7.2 在较复杂的WHRER子句中使用运算符 7.2.1 DISTINCT运算符 7.2.2 TOP运算符...

    Java数据库编程宝典1

    6.6 JDBC ResultSetMetaData 6.7 小结 第7章 使用SQL查询检索数据 7.1 SELECT语句 7.1.1 使用WHERE子句 7.1.2 格式化SQL命令 7.2 在较复杂的WHRER子句中使用运算符 7.2.1 DISTINCT运算符 7.2.2 TOP运算符...

    Java数据库编程宝典3

    6.6 JDBC ResultSetMetaData 6.7 小结 第7章 使用SQL查询检索数据 7.1 SELECT语句 7.1.1 使用WHERE子句 7.1.2 格式化SQL命令 7.2 在较复杂的WHRER子句中使用运算符 7.2.1 DISTINCT运算符 7.2.2 TOP运算符...

    jdbc学习手册 jdbc

    - `ResultSetMetaData`:用于获取`ResultSet`对象中列的类型和属性信息。 #### 三、驱动程序工作分类 根据工作方式的不同,JDBC驱动程序可以分为四类: 1. **JDBC-ODBC Bridge + ODBC驱动**:这种驱动程序将JDBC...

    hive jdbc依赖的jar包

    每个结果行可以通过`ResultSetMetaData`获取列名和类型信息,通过`ResultSet.next()`移动指针,`ResultSet.getObject()`或`ResultSet.getString()`等方法获取列值。 5. **事务处理**:Hive默认不支持事务,但某些...

    Java Database Programming with JDBC

    通过ResultSetMetaData接口,读者可以了解如何获取和理解数据库列的信息。此外,本章还介绍了如何将数据库表映射到Java对象,这是ORM的核心概念。 第七章"Working With Query Results"介绍了处理查询结果的方法,...

    jdbc基础的详解与总结

    ResultSet 接口是用来接收 select 语句返回的查寻结果的,DatabaseMetaData 是数据库元数据,ResultSetMetaData 是结果集元数据,Types 是特殊的类,只包含静态的常量,代表 jdbc 类型。 jdbc 的应用步骤包括注册...

    JDBC开发过程与原理

    - **ResultSetMetaData接口**:提供关于结果集的元数据信息。 #### 四、JDBC应用步骤详解 1. **注册加载驱动**:使用`Class.forName()`方法加载指定的驱动程序。 2. **创建数据库连接**:通过`DriverManager.get...

    JDBC资料文档第一部分

    - **ResultSetMetaData**:用于获取关于ResultSet对象中列的类型和属性信息的对象。 #### 五、JDBC驱动程序分类 根据工作方式的不同,JDBC驱动程序可以分为四类: 1. **JDBC-ODBC Bridge + ODBC驱动**:这种驱动...

    jdbc使用参考手册

    - **结果集元数据**:`ResultSetMetaData`对象提供列的相关信息。 - **JDBC逃逸**:防止SQL注入的编码技术。 ### 10. 示例代码 ```java Class.forName("com.mysql.jdbc.Driver"); Connection conn = ...

    jdbc桥技术详解,例子详解

    `ResultSet`对象用于存储查询结果,`ResultSetMetaData`提供了关于结果集列的信息。 - 数据库元数据:`DatabaseMetaData`对象提供了数据库的各种元数据,如表信息、列信息、数据库产品版本等。常见的方法有`...

    jdbc pdf入门讲解

    - **`java.sql.ResultSetMetaData`**:用于获取关于 `ResultSet` 对象中列的类型和属性信息的对象。 #### 三、JDBC 驱动程序分类 根据工作方式的不同,JDBC 驱动程序可以分为以下四类: 1. **JDBC-ODBC Bridge + ...

    J2EE体系统一,关于JDBC

    - `ResultSetMetaData`:提供有关`ResultSet`对象中列的信息。 - **`javax.sql` 包**:提供更高级别的数据库操作功能,如连接池管理、分布式事务支持等。其中的关键接口包括但不限于: - `DataSource`:用于连接...

    通过JDBC通过java连接DB2数据库

    ### 通过JDBC使用Java连接DB2数据库的关键知识点 #### JDBC简介 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成...

    JDBCDriver最齐驱动包

    在IT行业中,JDBC(Java Database Connectivity)是Java编程语言中用于规范应用程序如何访问和处理数据库的标准接口。JDBC驱动程序是实现这些接口的具体类,它们充当桥梁,连接Java应用程序和数据库管理系统。"JDBC...

    JDBC详细讲解介绍

    - **`ResultSetMetaData`** 和 **`DatabaseMetaData`** - 分别提供关于结果集和数据库的整体元数据信息。 2. **`javax.sql`** - 提供更高级的数据库操作功能。 - **`DataSource`** - 用于管理数据库连接池。 - *...

    JDBC笔记 JDBC笔记

    ### JDBC核心知识点详解 #### 一、概述 JDBC(Java Database Connectivity)是Java语言访问数据库的标准接口集合,实质上是调用者(通常是开发者或应用程序)与数据库供应商之间的一种协议。这种协议允许开发者...

Global site tag (gtag.js) - Google Analytics