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 閱讀(127) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          My Links

          News

          留言簿(18)

          隨筆檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 年辖:市辖区| 新巴尔虎右旗| 叶城县| 五常市| 佳木斯市| 贵州省| 阳原县| 宁城县| 济宁市| 安龙县| 奉节县| 揭东县| 襄樊市| 洪湖市| 阳江市| 丽水市| 黑山县| 玉屏| 延边| 天等县| 常州市| 卢龙县| 黔西县| 衢州市| 盐津县| 嵊泗县| 大新县| 南昌县| 泸西县| 友谊县| 武隆县| 阿勒泰市| 青岛市| 萨嘎县| 紫云| 龙胜| 河北区| 河西区| 泽库县| 潞城市| 安平县|