`
pavel
  • 浏览: 928094 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdbc结果集转换成对象列表

    博客分类:
  • jdbc
阅读更多

将jdbc结果集转换成对象列表
估计hibernate就是用得这种方式进行转换的。
实体对象

Java代码 复制代码
  1. package test;   
  2. //实体对象,该对象的属性与数据库中的字段相同,当然可以改变具体看需求   
  3. public class Person {   
  4.     private int id;   
  5.     private int age;   
  6.     private String name;   
  7.     public int getId() {   
  8.         return id;   
  9.     }   
  10.     public void setId(int id) {   
  11.         this.id = id;   
  12.     }   
  13.     public int getAge() {   
  14.         return age;   
  15.     }   
  16.     public void setAge(int age) {   
  17.         this.age = age;   
  18.     }   
  19.     public String getName() {   
  20.         return name;   
  21.     }   
  22.     public void setName(String name) {   
  23.         this.name = name;   
  24.     }   
  25.        
  26. }  

 

Java代码 复制代码
  1. package test;   
  2.   
  3. import java.lang.reflect.Field;   
  4. import java.sql.Connection;   
  5. import java.sql.PreparedStatement;   
  6. import java.sql.ResultSet;   
  7. import java.sql.SQLException;   
  8. import java.util.List;   
  9.   
  10. public class Main {   
  11.     //用于测试的方法   
  12.     public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, ClassNotFoundException {   
  13.         Connection conn = DbUtils.getConn();   
  14.         ResultSet rs = null;   
  15.         PreparedStatement psmt = null;   
  16.         System.out.println(conn);   
  17.         try {   
  18.             psmt = conn.prepareStatement("select * from person");   
  19.             rs = psmt.executeQuery();   
  20.             List list = DbUtils.populate(rs, Person.class);   
  21.             for(int i = 0 ; i<list.size() ; i++){   
  22.                 Person per = (Person) list.get(i);   
  23.                 System.out.println("person : id = "+per.getId()+" name = "+per.getName()+" age = "+per.getAge());   
  24.             }   
  25.         } catch (SQLException e) {   
  26.             e.printStackTrace();   
  27.         }finally{   
  28.             if(rs!=null){   
  29.                 try {   
  30.                     rs.close();   
  31.                 } catch (SQLException e) {   
  32.                     e.printStackTrace();   
  33.                 }   
  34.                 rs=null;   
  35.             }   
  36.             if(psmt!=null){   
  37.                 try {   
  38.                     psmt.close();   
  39.                 } catch (SQLException e) {   
  40.                     e.printStackTrace();   
  41.                 }   
  42.                 psmt=null;   
  43.             }   
  44.             if(conn!=null){   
  45.                 try {   
  46.                     conn.close();   
  47.                 } catch (SQLException e) {   
  48.                     e.printStackTrace();   
  49.                 }   
  50.                 conn=null;   
  51.             }   
  52.         }   
  53.            
  54.     }   
  55.   
  56. }  
Java代码 复制代码
  1. package test;   
  2.   
  3. import java.lang.reflect.Field;   
  4. import java.sql.Connection;   
  5. import java.sql.DriverManager;   
  6. import java.sql.ResultSet;   
  7. import java.sql.ResultSetMetaData;   
  8. import java.sql.SQLException;   
  9. import java.util.ArrayList;   
  10. import java.util.List;   
  11.   
  12. public class DbUtils {   
  13.     private static String url = "jdbc:mysql://localhost:3306/test";   
  14.     private static String username = "root";   
  15.     private static String password = "";   
  16.     private static String driverClass = "com.mysql.jdbc.Driver";   
  17.     //没什么好说的,获取数据库连接   
  18.     public static Connection getConn(){   
  19.         Connection conn = null;   
  20.         try {   
  21.             Class.forName(driverClass);   
  22.             conn = DriverManager.getConnection(url,username,password);   
  23.         } catch (ClassNotFoundException e) {   
  24.             e.printStackTrace();   
  25.         } catch (SQLException e) {   
  26.             e.printStackTrace();   
  27.         }   
  28.            
  29.         return conn;   
  30.     }   
  31.     /*  
  32.      * 将rs结果转换成对象列表  
  33.      * @param rs jdbc结果集  
  34.      * @param clazz 对象的映射类  
  35.      * return 封装了对象的结果列表  
  36.      */  
  37.     public static List populate(ResultSet rs , Class clazz) throws SQLException, InstantiationException, IllegalAccessException{   
  38.         //结果集的元素对象    
  39.         ResultSetMetaData rsmd = rs.getMetaData();   
  40.         //获取结果集的元素个数   
  41.          int colCount = rsmd.getColumnCount();   
  42. //       System.out.println("#");   
  43. //       for(int i = 1;i<=colCount;i++){   
  44. //           System.out.println(rsmd.getColumnName(i));   
  45. //           System.out.println(rsmd.getColumnClassName(i));   
  46. //           System.out.println(rsmd.getColumnClassLabel(i));   
  47. //       }   
  48.          //返回结果的列表集合   
  49.          List list = new ArrayList();   
  50.          //业务对象的属性数组   
  51.          Field[] fields = clazz.getDeclaredFields();   
  52.          while(rs.next()){//对每一条记录进行操作   
  53.              Object obj = clazz.newInstance();//构造业务对象实体   
  54.              //将每一个字段取出进行赋值   
  55.              for(int i = 1;i<=colCount;i++){   
  56.                  Object value = rs.getObject(i);   
  57.                  //寻找该列对应的对象属性   
  58.                  for(int j=0;j<fields.length;j++){   
  59.                      Field f = fields[j];   
  60.                      //如果匹配进行赋值   
  61.                      if(f.getName().equalsIgnoreCase(rsmd.getColumnName(i))){   
  62.                          boolean flag = f.isAccessible();   
  63.                          f.setAccessible(true);   
  64.                          f.set(obj, value);   
  65.                          f.setAccessible(flag);   
  66.                      }   
  67.                  }   
  68.              }   
  69.              list.add(obj);   
  70.          }   
  71.         return list;   
  72.     }   
  73. }  
分享到:
评论

相关推荐

    使用注释将JDBC结果集映射到对象

    这就是"使用注释将JDBC结果集映射到对象"的主题所关注的。这个主题介绍了一种方法,通过使用注解来简化这个过程,使得数据转换更加高效和易于维护。 在传统的JDBC编程中,我们通常需要手动编写代码来遍历`ResultSet...

    java实现jdbc查询结果集result转换成对应list集合

    当我们通过JDBC执行SQL查询并获取结果集(ResultSet)时,通常我们需要将这些数据转换为更易于处理的数据结构,如List。本篇文章将详细讲解如何将ResultSet转换为对应的List集合。 首先,我们了解ResultSet对象。...

    JDBC基础教程之ResultSet对象.doc )

    总之,`ResultSet`对象是JDBC API中处理SQL查询结果的核心,它通过光标管理、列数据访问以及数据类型转换等功能,为开发者提供了灵活而强大的数据处理能力。理解和掌握`ResultSet`的使用,对于高效开发基于JDBC的...

    简易实现jdbc传对象

    首先,我们需要理解JDBC的基本操作步骤:加载数据库驱动、建立数据库连接、创建Statement或PreparedStatement对象、执行SQL语句以及处理结果集。在传统的JDBC操作中,我们通常是直接使用SQL语句插入、更新或查询数据...

    将ResultSet中得到的一行或多行结果集封装成对象的实例

    将ResultSet中得到的一行或多行结果集封装成对象的实例是指在使用JDBC连接数据库时,将查询结果集转换成对象的实例,以便更方便地访问和操作数据库中的数据。 在使用JDBC连接数据库时,执行查询语句时会得到一个...

    javaBean自动生成工具,jdbc连接池封装

    "支持Resultset转List JavaBean对象"表示JDBCUtils工具类可能还包含了将数据库查询结果(ResultSet)转化为JavaBean对象集合(List)的功能。这通常涉及到迭代ResultSet,为每个记录创建一个新的JavaBean实例,并...

    jdbc核心代码.docx

    使用DriverManager类的getConnection()方法创建一个连接对象,连接对象是JDBC的核心对象,用于执行SQL语句和处理结果集。 3. 获取Statement 使用Connection对象的createStatement()方法创建一个Statement对象,...

    JDBC-用元数据将结果集封装为List对象[归类].pdf

    在处理查询结果时,如果需要对结果集进行进一步的操作,比如转换为Java对象列表,`ResultSetMetaData`就非常有用。以下是一个简单的例子: ```java public List, Object&gt;&gt; resultSetToList(ResultSet rs) throws ...

    jdbc问题集收藏总结

    `ResultSet`对象表示执行SQL语句后返回的结果集,它提供了对结果集中数据的操作方法。 **详细解析:** 1. **`ResultSet`的概念:** - `ResultSet`是一个可滚动的记录集合,它可以通过调用`Statement`或`...

    执行sql语句,并将结果通过ArrayList返回。字段名统一大写 JDBC 连接数据库

    本文将详细介绍如何利用JDBC连接不同的数据库,并执行SQL查询语句,同时将查询结果存储到`ArrayList`中返回,其中字段名统一转换为大写形式。 #### 二、JDBC连接数据库 JDBC是一种用于执行SQL语句的标准Java API,...

    jdbc-driver集

    5. **处理结果**:获取并处理查询结果,例如通过ResultSet对象。 6. **关闭资源**:在操作完成后,务必关闭Statement、ResultSet和Connection以释放资源。 在"jdbc-driver集"中,可能包含了不同数据库的JDBC驱动JAR...

    jdbc资料jdbc资料jdbc资料pdf

    JDBC提供了与数据库建立连接、发送SQL语句并处理结果的基本方法。 - **接口定义**:JDBC接口由Sun公司(现在是Oracle的一部分)定义,定义了一组标准接口。 - **实现方式**:具体的实现是由各个数据库厂商提供的,...

    java增删改查JDBC封装类(泛型封装)

    - 使用泛型可以使其支持不同类型的查询结果处理器,如`ArrayListHandler`用于将结果集转换为List,`SingleBeanHandler`用于处理单个实体对象。 6. **最佳实践**: - 使用PreparedStatement代替Statement,防止SQL...

    hibernate将本地SQL查询结果封装成对象(最终).zip

    - 结果集转换:`addEntity()`方法用于指定查询结果应被映射到哪个实体类,`list()`或`scroll()`方法执行查询并返回结果集,这些结果集将自动封装为对应的Java对象。 5. 示例: 假设我们有一个`User`实体类,对应...

    commons-utils简化JDBC使用(文档+示例)

    2. **结果集处理**:讲解如何使用BeanHandler、MapHandler等处理器将结果集转换为Java对象或Map。 3. **批处理操作**:解释如何使用BatchRunner进行批处理操作,以及如何设置参数。 4. **异常处理**:阐述DBUtils...

    JDBC经典练习题

    **JDBC(Java Database Connectivity)**是Java编程语言中用于规范客户端程序如何访问数据库的应用程序接口,提供了诸如连接数据库、发送SQL语句、处理结果集等数据库操作的相关类和方法。JDBC允许开发者编写可移植...

    sqljdbc41.jar

    sqljdbc41.jar驱动负责处理SQL语句的编译、执行、结果集的处理等工作,并将Java数据类型转换为SQLServer可识别的数据类型。 四、使用sqljdbc41.jar连接SQLServer 使用sqljdbc41.jar连接SQLServer的步骤大致如下: ...

    JDBC开发过程与原理

    - **处理结果集**:查询操作的结果会被封装成`ResultSet`对象,便于进行进一步的数据处理。 #### 二、JDBC驱动程序的类型 JDBC驱动程序按照其工作方式可以分为四类: 1. **JDBC-ODBC桥加ODBC驱动程序**:这是一种...

Global site tag (gtag.js) - Google Analytics