`

将jdbc结果集转换成对象列表

    博客分类:
  • J2SE
阅读更多
将jdbc结果集转换成对象列表
估计hibernate就是用得这种方式进行转换的。
实体对象
package test;
//实体对象,该对象的属性与数据库中的字段相同,当然可以改变具体看需求
public class Person {
	private int id;
	private int age;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}


package test;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class Main {
	//用于测试的方法
	public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, ClassNotFoundException {
		Connection conn = DbUtils.getConn();
		ResultSet rs = null;
		PreparedStatement psmt = null;
		System.out.println(conn);
		try {
			psmt = conn.prepareStatement("select * from person");
			rs = psmt.executeQuery();
			List list = DbUtils.populate(rs, Person.class);
			for(int i = 0 ; i<list.size() ; i++){
				Person per = (Person) list.get(i);
				System.out.println("person : id = "+per.getId()+" name = "+per.getName()+" age = "+per.getAge());
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				rs=null;
			}
			if(psmt!=null){
				try {
					psmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				psmt=null;
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				conn=null;
			}
		}
		
	}

}


具体的工具类
package test;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DbUtils {
	private static String url = "jdbc:mysql://localhost:3306/test";
	private static String username = "root";
	private static String password = "";
	private static String driverClass = "com.mysql.jdbc.Driver";
	//没什么好说的,获取数据库连接
	public static Connection getConn(){
		Connection conn = null;
		try {
			Class.forName(driverClass);
			conn = DriverManager.getConnection(url,username,password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return conn;
	}
	/*
	 * 将rs结果转换成对象列表
	 * @param rs jdbc结果集
	 * @param clazz 对象的映射类
	 * return 封装了对象的结果列表
	 */
	public static List populate(ResultSet rs , Class clazz) throws SQLException, InstantiationException, IllegalAccessException{
		//结果集的元素对象 
		ResultSetMetaData rsmd = rs.getMetaData();
		//获取结果集的元素个数
		 int colCount = rsmd.getColumnCount();
//		 System.out.println("#");
//		 for(int i = 1;i<=colCount;i++){
//			 System.out.println(rsmd.getColumnName(i));
//			 System.out.println(rsmd.getColumnClassName(i));
//			 System.out.println("#");
//		 }
		 //返回结果的列表集合
		 List list = new ArrayList();
		 //业务对象的属性数组
		 Field[] fields = clazz.getDeclaredFields();
		 while(rs.next()){//对每一条记录进行操作
			 Object obj = clazz.newInstance();//构造业务对象实体
			 //将每一个字段取出进行赋值
			 for(int i = 1;i<=colCount;i++){
				 Object value = rs.getObject(i);
				 //寻找该列对应的对象属性
				 for(int j=0;j<fields.length;j++){
					 Field f = fields[j];
					 //如果匹配进行赋值
					 if(f.getName().equalsIgnoreCase(rsmd.getColumnName(i))){
						 boolean flag = f.isAccessible();
						 f.setAccessible(true);
						 f.set(obj, value);
						 f.setAccessible(flag);
					 }
				 }
			 }
			 list.add(obj);
		 }
		return list;
	}
}

分享到:
评论
1 楼 u010778233 2016-08-26  
写得很不错,已经用起来了,谢谢

相关推荐

    使用注释将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连接数据库时,执行查询语句时会得到一个...

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

    这样,我们就将结果集转换为了一个List对象,每个元素是包含所有列名和对应值的Map。 在给定的代码片段中,`DBUtils`类提供了一个静态方法`getConnection()`用于获取数据库连接,以及一个`free()`方法用于释放...

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

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

    jdbc核心代码.docx

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

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

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

    JDBC主要API介绍.pdf

    3. JDBC驱动桥:它将JDBC调用转换为特定厂商的数据库驱动API调用。这种方式同样需要在客户端安装特定厂商的驱动程序,但它适用于非Java数据库的访问。 4. 纯Java驱动:这是最高效的驱动形式,将JDBC调用转换为...

    jdbc问题集收藏总结

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

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

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

    jdbc学习手册 jdbc

    1. **JDBC-ODBC Bridge + ODBC驱动**:这种驱动程序将JDBC调用转换为ODBC调用,再由ODBC驱动程序将其转换为数据库访问命令。这种方式的优点是可以利用现有的ODBC数据源访问数据库,但效率和安全性较低。 2. **基于...

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

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

    JDBC与Java数据库编程

    - **采用JDBC-ODBC桥的形式**:这种驱动程序将JDBC调用转换成ODBC调用,然后通过ODBC驱动程序与数据库通信。这种方式适用于那些没有提供原生JDBC驱动程序的数据库。 - **部分JAVA程序和部分本地代码组成**:这类驱动...

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

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

    JDBC开发过程与原理

    3. **JDBC网络纯Java驱动程序**:这种驱动程序将JDBC调用转换为一种与数据库无关的网络协议,然后由服务器端将其转化为具体的数据库协议。这种方式非常灵活,尤其适用于Intranet环境。 4. **本地协议纯Java驱动程序*...

    jdbc资料jdbc资料jdbc资料pdf

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

    jdbc-driver集

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

Global site tag (gtag.js) - Google Analytics