javan

          i like java
          隨筆 - 0, 文章 - 28, 評論 - 2, 引用 - 0
          數據加載中……

          摘在網上一段處理ResultSet轉list的方法

          一般做法是將ResultSet封裝成一個個javabean然后將javabean放入list集合中返回。

          類似于:
          public   class   test   {

          DB   dbx   =   new   DB();

          public   static   List   resultSetToList(String   sql)   throws   SQLException   {
          DB   dbx   =   new   DB();
          ResultSet   rs   =   dbx.executeQuery(sql);
          ResultSetMetaData   md   =   rs.getMetaData();
          for   (int   i   =   0;   i   <   md.getColumnCount();   i++)   {
          System.out.println(md.getColumnName(i));
          System.out.println( "----------------- ");
          }
          List   list   =   new   ArrayList();
          while   (rs.next())   {
          UserBean   bean   =   new   UserBean();
          int   userid   =   rs.getInt( "userid ");
          String   username   =   rs.getString( "username ");
          bean.setUserid(userid   +   " ");
          bean.setUsername(username);
          list.add(bean);
          System.out.println(userid   +   "   "+username);
          }
          return   list;
          }
          }




          另外一種方法
          package com.service;

          import java.lang.reflect.Method;
          import java.sql.ResultSet;
          import java.sql.ResultSetMetaData;
          import java.util.ArrayList;
          import java.util.List;

          import com.entity.Student;

          public class Service {
              
          public List toList(ResultSet rs,Class cls)
              {
                  
          try
                  {
                      
                      List lst
          =new ArrayList();
                      //用于獲取列數、或者列類型
                      ResultSetMetaData meta
          =rs.getMetaData();
                      Object obj
          =null;
                      
          while(rs.next())
                      {
                          //獲取formbean實例對象
                          obj
          =Class.forName(cls.getName()).newInstance();              //用Class.forName方法實例化對象和new創建實例化對象是有很大區別的,它要求JVM首先從類加載器中查找類,然后再實例化,并且能執行類中的靜態方法。而new僅僅是新建一個對象實例
                          //循環獲取指定行的每一列的信息
                          
          for(int i=1;i<=meta.getColumnCount();i++)
                          {
                              //當前列名
                              String colName
          =meta.getColumnName(i);
                              //將列名第一個字母大寫(為什么加+""ne ?是大寫字母比小寫字母多個字節?)
                              colName
          =colName.replace(colName.charAt(0)+""new String(colName.charAt(0)+"").toUpperCase());
                             
          //設置方法名
                              String methodName="set"+colName;
                              System.out.println(methodName);
                              //獲取當前位置的值,返回Object類型
                              Object value
          =rs.getObject(i);
                              //利用反射獲取對象(反射概念很模糊?不太懂)
                              Method method
          =obj.getClass().getMethod(methodName, value.getClass());
                              method.invoke(obj, value);                 //感覺這段類似于obj.setMethodName(value)......對于靜態方法的反射可以寫成method.invoke(null,value),而不能把第一個參數省略,如果方法沒有參數的話,第二個參數可以為空
                          }
                          lst.add(obj);
                      }
                      
                      
          return lst;
                  }
                  
          catch(Exception ex)
                  {
                      ex.printStackTrace();
                      
          return null;
                  }
                  
              }
          }

          posted on 2009-05-22 11:23 whl 閱讀(2473) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 杨浦区| 枣强县| 扶风县| 湘西| 开封市| 商洛市| 衡南县| 道孚县| 镇赉县| 靖西县| 长治市| 新建县| 谢通门县| 平泉县| 满洲里市| 酒泉市| 肥乡县| 乌兰县| 杭锦后旗| 泌阳县| 叙永县| 永春县| 台中县| 晋中市| 黎城县| 卓资县| 类乌齐县| 太白县| 富平县| 乐陵市| 鹿邑县| 来安县| 高碑店市| 陆丰市| 郸城县| 乡城县| 绍兴县| 云南省| 阿拉善盟| 邹平县| 北辰区|