afunms

My Software,My Dream—Forge a more perfect NMS product.

new framework(6)--extract data from ResultSet via reflect

今天试了一下用反射从ResultSet 提取数据,然后调用相应的dto的方法。
这样就不要每次都针对一个新表来写一次extractData方法了,挺爽的。
缺点就是数据表中的字段与dto的方法必须一一对应。

   /**
    * extract data from ResultSet to dto
    
*/

   
protected DtoInterface extractData(ResultSet rs) throws Exception
   
{
       
if(dtoClass == null

          
throw new NullPointerException("dtoClass is not setted!"
); 
       
       DtoInterface dto 
=
 dtoClass.newInstance();
       ResultSetMetaData rsm 
=
 rs.getMetaData(); 
       
for(int i=1;i<=rsm.getColumnCount();i++

       

           String methodName 
= "set" + rsm.getColumnName(i).replaceAll("_"""
); 
           SysLogger.debug(
"[" + rsm.getColumnName(i) + "]=" + rsm.getColumnType(i) + ",method=" +
 methodName);
           Method method 
=
 lookupMethod(dtoClass.getMethods(), methodName);
           
if(method==null

           

               SysLogger.error(
"set" + rsm.getColumnName(i) + " does not exist"
); 
               
continue
;
           }
 
           
if(rsm.getColumnType(i)==
Types.INTEGER) 
              method.invoke(dto,rs.getInt(i)); 
           
else if(rsm.getColumnType(i)==
Types.VARCHAR) 
              method.invoke(dto,rs.getString(i)); 
       }
 
       
return
 dto; 
   }

   
   
protected Method lookupMethod(Method[] methods,String methodName) 
   

       Method result 
= null

       
for
(Method method:methods) 
       

           
if
(method.getName().equalsIgnoreCase(methodName)) 
           

               result 
=
 method; 
               
break

           }
 
       }

       
return result; 
    }
 

posted on 2007-05-06 22:33 afunms 阅读(119) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

My Links

News

留言簿(18)

随笔档案

相册

搜索

最新评论

阅读排行榜