VA利用反射进行数据库的读取免数据类型转换

在JAVA项目开发中,我们经常需要用到反射,但是在使用的过程中,数据类型的转换一直影响着我们开发的进度,下面是我对这一问题的解决方案,如大家有其它更好的解决方案希望能与之分享。

一:我们需要将commons-beanutils-1.8.2.jar和commons-logging-1.0.4.jar放在项目的WebRoot/Web-inf/lib文件夹下,(如果需要上述组件可以通过邮箱:btqnyao@163.com联系我)从新发布项目。

二:我通过从数据库读取的一个方法想大家介绍下使用方法。

public static List excuteQuerry(String sqlString,String[] para,Class cla){
  Connection connection=null;
  PreparedStatement pStatement=null;
  ResultSet rSet=null;
  connection=getConnection();
  List list = new ArrayList();
  
  try {
   pStatement=connection.prepareStatement(sqlString);
   addParam(para, pStatement);
   rSet=pStatement.executeQuery();               //执行查询操作
   ResultSetMetaData rsmd= rSet.getMetaData();         //用于获取ResultSet对象中列的类型和属性信息
   int count= rsmd.getColumnCount();           //获得rSet中有多少列
   String[] columnName=new String[count];
   for(int i=0;i<count;i++){
    columnName[i]=rsmd.getColumnName(i+1);       //得到rSet结果集中的所有列的名字
   }

     //PropertyUtils主要是利用反射机制对JavaBean的属性进行处理。支持不同类型的自行转换

     //得到JavaBean的所有属性的描述
     PropertyDescriptor[] pd=PropertyUtils.getPropertyDescriptors(cla);
     while(rSet.next()){
      Object obj=null;
      try {
      obj = cla.newInstance();          //创建新对象,便于存储
      } catch (Exception e) {
      // TODO 自动生成 catch 块
      e.printStackTrace();
      }
      for(int i=0;i<count;i++){
       for(int j=0;j<pd.length;j++){
        if(columnName[i].equalsIgnoreCase(pd[j].getName())){
         Object value=rSet.getObject(columnName[i]);       //从数据库获得对应属性的值
         if(value!=null){
          try {

         //BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理,不支持数据类型的自动转换
        BeanUtils.setProperty(obj,columnName[i],value);     //通过BeanUtils对JavaBean进行赋值
        list.add(obj);
       } catch (IllegalAccessException e) {
        // TODO 自动生成 catch 块
        e.printStackTrace();
       } catch (InvocationTargetException e) {
        // TODO 自动生成 catch 块
        e.printStackTrace();
       }
         }
        }
       }
      }
     }
    
  } catch (SQLException e) {
   throw new DaoException("执行非查询操作出错",e);
  }finally{
   closeAll(null, pStatement, connection);
  } 
  return list;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值