javan

          i like java
          隨筆 - 0, 文章 - 28, 評(píng)論 - 2, 引用 - 0
          數(shù)據(jù)加載中……

          摘在網(wǎng)上一段處理ResultSet轉(zhuǎn)list的方法

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

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


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 田东县| 密山市| 奉节县| 夏津县| 太和县| 盈江县| 长治市| 曲阳县| 红桥区| 桦川县| 博白县| 岑巩县| 若羌县| 保康县| 两当县| 柏乡县| 扎赉特旗| 永兴县| 云安县| 万宁市| 儋州市| 高台县| 武胜县| 乐至县| 杨浦区| 泽普县| 衡南县| 河北区| 营山县| 定西市| 麻城市| 金秀| 涡阳县| 兴业县| 瑞金市| 金湖县| 双峰县| 喀什市| 柞水县| 驻马店市| 曲阜市|