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

将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;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值