网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

简化繁琐的赋值——反射在Jdbc和Struts中的应用

http://www.diybl.com/ 2007-2-6  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】








//首先我们判断属性名数组是否和字段位置一一对应,如果不是抛出违例。







              if(propNames.length!=ports.length)







              {







                     System.out.println(“input args wrong:the propNames’ length is not the same with the ports’ length!”);







                     Throw new ValueManagerException(“input args wrong:the propNames’ length is not the same with the ports’ length!”);







}







           try







           {







 







//对属性名数组进行循环







                  for(int i=0;i<fieldNames.length;i++)







                  {







 







//在下面的语句中,我们首先取得属性名propNames[i];再对Javabean对象o取得它的Class对象,o.getClass();最后通过Class对象取得属性名对应的属性。







                         Field f=o.getClass().getDeclaredField(propNames[i])







 







//我们通过属性取得该属性对应的类型的名称。







                         String type=f.getType().getName();







                   







 







//下面的语句作为重点,我们做一个标记,在后面来陈述。







ValueSetter.valueToBean(type,Tools.getSetterName(propNames[i]),o,ValueGetter.getStmtValue(type,ports[i],stmt));                        语句一







                  }







           }







           catch(Exception e)







           {







             e.printStackTrace();







           }







在上面的语句一中,







我们先看valueToBean方法的输入参数:







第一个参数,type是我们前面取得的属性的类型;







第二个参数,里面有一个getSetterName方法,显然是想取得属性名对应的set方法,我们来看Tools类里头的getSetterName方法,







public static String getSetterName(String propName)







  {







     return "set"+propName.substring(0,1).toUpperCase()+propName.substring(1,propName.length());







  }







可以看出该方法的确是由属性名取得了该属性对应的set方法名;







第三个参数,o是对应的Javabean对象;







第四个参数,里头有一个getStmtValue方法,可以看出该方法是想取得stmt中对应位置的值,我们来看ValueGetter类中的getStmtValue方法的实现:







public static String getStmtValue(String type,int port, OracleCallableStatement stmt)







{







        try







        {







       if(type.equals("java.lang.String"))







      {







        return stmt.getString(port);







      }







      else if(type.equals("int"))







      {







        return String.valueOf(stmt.getInt(port));







      }







      else if(type.equals("long"))







      {







        return String.valueOf(stmt.getLong(port));







      }







      else if(type.equals("float"))







      {







        return String.valueOf(stmt.getFloat(port));







      }







      else







      {







          &nbs

欢迎光临DIY部落,点击这里查看更多文章教程   【点击打包该文章】
如果图片或页面不能正常显示请点击这里 站内搜索:   

文章评论

请您留言