dgraham     2003/10/14 20:43:32

  Modified:    dbutils/src/java/org/apache/commons/dbutils DbUtils.java
  Log:
  Simplifed resultSetToBeanCollection() logic and return faster ArrayList 
  instead of tired old Vector.
  
  Revision  Changes    Path
  1.28      +73 -67    
jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/DbUtils.java
  
  Index: DbUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/DbUtils.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- DbUtils.java      15 Oct 2003 03:30:01 -0000      1.27
  +++ DbUtils.java      15 Oct 2003 03:43:32 -0000      1.28
  @@ -61,6 +61,10 @@
    
   package org.apache.commons.dbutils;
   
  +import java.beans.BeanInfo;
  +import java.beans.IntrospectionException;
  +import java.beans.Introspector;
  +import java.beans.PropertyDescriptor;
   import java.sql.Connection;
   import java.sql.PreparedStatement;
   import java.sql.ResultSet;
  @@ -70,6 +74,7 @@
   import java.sql.Types;
   import java.util.ArrayList;
   import java.util.Arrays;
  +import java.util.Collection;
   import java.util.HashMap;
   import java.util.Iterator;
   import java.util.List;
  @@ -380,68 +385,70 @@
           
           return obj;
       }
  +    
       /**
  -     * optimized for collections of beans
  -     * 
  +     * Optimized for collections of beans.
        */
  -    public static java.util.Collection resultSetToBeanCollection(ResultSet rs, 
Class cls) throws SQLException {
  -        java.util.List results = new java.util.Vector();
  -        try{
  -            
  -            if(rs.next()){
  -                
  -                java.beans.BeanInfo bInfo = 
java.beans.Introspector.getBeanInfo(cls);
  -                java.beans.PropertyDescriptor pd[]  = 
bInfo.getPropertyDescriptors();
  -                ResultSetMetaData rsmd = rs.getMetaData();
  -                int cnt = rsmd.getColumnCount();
  -                int nameToIndex[] = new int[ cnt + 1 ];
  +    public static Collection resultSetToBeanCollection(ResultSet rs, Class cls)
  +        throws SQLException {
  +
  +        Collection results = new ArrayList();
  +
  +        if (!rs.next()) {
  +            return results;
  +        }
  +
  +        BeanInfo beanInfo = null;
  +        try {
  +            beanInfo = Introspector.getBeanInfo(cls);
  +        } catch (IntrospectionException ie) {
  +            throw new DbException(ie);
  +        }
  +
  +        PropertyDescriptor pd[] = beanInfo.getPropertyDescriptors();
  +        ResultSetMetaData rsmd = rs.getMetaData();
  +        int cnt = rsmd.getColumnCount();
  +        int nameToIndex[] = new int[cnt + 1];
  +
  +        LOOP : for (int i = 1; i <= cnt; i++) {
  +            String name = rsmd.getColumnName(i);
  +            for (int j = 0; j < pd.length; j++) {
  +                if (name.equals(pd[j].getName())) {
  +                    nameToIndex[i] = j;
  +                    continue LOOP;
  +                }
  +            }
  +            throw new SQLException(" index not found for " + name);
  +        }
  +
  +        do {
  +            Object obj;
  +            try {
  +                obj = cls.newInstance();
  +
  +            } catch (Exception e) {
  +                throw new DbException("can not create " + cls.getName(), e);
  +            }
  +
  +            for (int i = 1; i <= cnt; i++) {
  +                Object value = rs.getObject(i);
  +                int index = nameToIndex[i];
  +                if (rs.wasNull()) {
  +                    continue;
  +                }
                   
  -                LOOP:
  -                    for( int i = 1; i <= cnt; i++ ){
  -                       String name = rsmd.getColumnName(i);
  -                        for( int j = 0; j < pd.length; j++ ){
  -                            if(name.equals(pd[j].getName())){
  -                                nameToIndex[i] = j;
  -                                continue LOOP;
  -                            }
  -                        }
  -                        throw new SQLException(" index not found for " + name );
  -                    }
  -                    do{
  -                        
  -                        Object obj;
  -                        try{
  -                            
  -                            obj = cls.newInstance();
  -                            
  -                        }catch(Exception e){
  -                            throw new DbException( "can not create " + 
cls.getName() , e);
  -                        }
  -                        
  -                        for(int i = 1; i <= cnt; i++){
  -                            Object value = rs.getObject(i);
  -                            int index = nameToIndex[i];
  -                            if( rs.wasNull() ){
  -                                continue;
  -                            }
  -                            try{
  -                                
  -                                pd[index].getWriteMethod().invoke(obj, new 
Object[]{ value });
  -                                
  -                                
  -                            }catch(Exception e){
  -                                throw new DbException( "can not set " + 
pd[index].getName() , e);
  -                            }
  -                        }
  -                        results.add(obj);
  -                    }while(rs.next());
  +                try {
  +                    pd[index].getWriteMethod().invoke(obj, new Object[] { value });
  +
  +                } catch (Exception e) {
  +                    throw new DbException("can not set " + pd[index].getName(), e);
  +                }
               }
               
  -        }catch(java.beans.IntrospectionException ie){
  -            throw new DbException(ie);
  -        }
  -        
  -        
  +            results.add(obj);
  +            
  +        } while (rs.next());
  +
           return results;
       }
       
  @@ -452,15 +459,14 @@
        */
       public static Object[] resultSetToArray(ResultSet rs) throws SQLException {
           ResultSetMetaData meta = rs.getMetaData();
  -        int sz = meta.getColumnCount();
  -        Object[] objs = new Object[sz];
  -        for (int i = 0; i < sz; i++) {
  +        int cols = meta.getColumnCount();
  +        Object[] objs = new Object[cols];
  +        for (int i = 0; i < cols; i++) {
               Object obj = rs.getObject(i + 1);
  -            if (rs.wasNull()) {
  -                obj = null;
  -            }
  -            objs[i] = obj;
  +            
  +            objs[i] = rs.wasNull() ? null : obj;
           }
  +
           return objs;
       }
       
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to