jdbc结果集转换成对象列表

系统 1889 0

将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结果集转换成对象列表


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论