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

来源:互联网 发布:书生软件7.3 编辑:程序博客网 时间:2024/06/11 19:44

参考url:http://llying.iteye.com/blog/219020

备注:如果运行提示类型转换错误,可能model个别对象属性需要设置为BigInteger(参考对应表的字段属性)。java对象不支持Long类型。

注意:java对象属性需与数据库字段完全配置,不支持驼峰法命名。r如:数据库:user_name ,则java中需为:user_name.(userName则失败)

1,工具代码

  
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;


import com.uei.sms.service.SmsService;  
  
public class DbUtils {  
    private static String url = "jdbc:mysql://UEIDATABASE:3306/uei?useUnicode=true&characterEncoding=UTF-8";  
    private static String username = "uei";  
    private static String password = "uei123";  
    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  <T> List populate(ResultSet rs , Class clazz) throws SQLException, InstantiationException, IllegalAccessException{  
        //结果集的元素对象   
        ResultSetMetaData rsmd = rs.getMetaData();  
        //获取结果集的元素个数  
         int colCount = rsmd.getColumnCount();  
         //返回结果的列表集合  
         List list = new ArrayList<T>();  
         //业务对象的属性数组  
         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();  
                         System.out.println(f.getName());
                         System.out.println(f.getType());
                         f.setAccessible(true);  
                         System.out.println(value);
                         System.out.println(obj);
                         f.set(obj, value);  
                         f.setAccessible(flag);  
                     }  
                 }  
             }  
             list.add((T)obj);  
         }  
        return list;  
    }  
}  


2,使用样例:

 String sql = "SELECT * FROM  TABLES ";
        Connection conn;
        try {
            conn = DriverManager.getConnection(configParams.connectionURL, configParams.userName,
                    configParams.password);
            PreparedStatement pst = conn.prepareStatement(sql);// 准备执行语句
            ResultSet rst = pst.executeQuery();
            try {
                List<TableModel> list = DbUtils.populate(rst, TableModel.class);
                
            } catch (InstantiationException | IllegalAccessException e) {
                e.printStackTrace();
            }  
            
            rst.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

0 0
原创粉丝点击