您的位置:首页 > 数据库

手动写一个将数据库中查询的内容封装到对象中

2016-07-26 16:44 369 查看
-------------------------使用反射来获取指定方法-------------------------

当为方法的参数设置值时可以使用将参数向上转型为Object 再设到方法上

ublic T handler(ResultSet rs) {

 try{

  T instance = clazz.newInstance();//获取类的实例

 ResultSetMetaData rsd= rs.getMetaData();//获取结果集上的源数据

 int count = rsd.getColumnCount();//获取源数据上的列数大小

 if(rs.next()){

     for(int i=1;i<=count;i++){

              String name = rsd.getColumnName(i);//获取指定列名称(name)

               name ="set" +name.substring(0,1).toUpperCase()+name.substring(1);//拼凑成setName形式

               String className =  rsd.getColumnClassName(i);//获取指定列名上的类型名(java.lang.String)

               Class clazz2 = Class.forName(className);//通过名称来获取Class对象

               Method method = clazz.getDeclaredMethod(name, clazz2);

               Object object = rs.getObject(i);

               method.invoke(instance, object); 

             }

  }

 return instance;

  }catch(Exception e){

   e.printStackTrace();

    throw new RuntimeException(e);

  }

 }

 

-------------------------------自己实现BeanListHandler------------------------

class BeanListHander<T> implements MyResultHandler<List>{

 private Class<T> clazz;

 

 public BeanListHander(Class<T> clazz){

  this.clazz = clazz;

 }

 

 @Override

 public List<T> handler(ResultSet rs) {

  List<T> list = new LinkedList<T>();//初始化一个List集合

  try{

   ResultSetMetaData rsd = rs.getMetaData();//获取结果集元数据

   int count = rsd.getColumnCount();//获取数据库中表的列数

   Method[] methods = new Method[count];//定义一个方法集合它的大小为列的长度

      for(int i=1;i<=count;i++){

       String name = rsd.getColumnName(i);//获取要调用方法的名称,这里只能获取它的后缀

       name = "set"+name.substring(0,1).toUpperCase()+name.substring(1);//拼接为一个完整的set

方法

       String ps = rsd.getColumnClassName(i);//获取方法上的参数类型字符串(java.lang.String)

       Class pt =Class.forName(ps);//生成Class对象

       methods[i-1] = clazz.getDeclaredMethod(name, pt);//获取方法对象并放入方法数组中

      }

   

  while(rs.next()){

   T instance = clazz.newInstance();

   for(int i=1;i<=count;i++){

    Object object = rs.getObject(i);

         methods[i-1].invoke(instance, object);

   }

   list.add(instance);

  }

  return list;

  }catch(Exception e){

   e.printStackTrace();

   throw new RuntimeException();

  }

 }

 

}

注意:这个中要你定义的类中例如User不能有基本类型如int,char,你必须为Integer。。还有一种办法是你可以先判断它是

为Integer类型吗,如果是你就把它转换为int.class设置数据可以为setInt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 转型 数据库 对象