baliuka     2003/03/16 05:28:54

  Modified:    dbutils/src/java/org/apache/commons/dbutils DbUtils.java
                        ProcedureUtils.java VectorHandler.java
               dbutils/src/test/org/apache/commons/dbutils Demo.java
                        ProcedureUtilsTest.java
  Added:       dbutils/src/java/org/apache/commons/dbutils MapHandler.java
               dbutils/src/test/org/apache/commons/dbutils DemoBean.java
                        DemoBeanHandler.java
  Log:
  added utilty methods to handle beans and maps
  
  Revision  Changes    Path
  1.18      +52 -0     
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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- DbUtils.java      14 Mar 2003 17:27:32 -0000      1.17
  +++ DbUtils.java      16 Mar 2003 13:28:53 -0000      1.18
  @@ -287,7 +287,59 @@
               return false;
           }
       }
  +  
  +     /**
  +     * Create an Map from a ResultSet.
  +     * It is assumed that next() has already been called on the ResultSet.
  +     */
  +  
  +    public static java.util.Map resultSetToMap(ResultSet rs) throws SQLException {
  +         java.util.Map result = new java.util.Hashtable();
  +         ResultSetMetaData rsmd = rs.getMetaData();
  +         int cnt = rsmd.getColumnCount();
  +         for( int i = 1; i <= cnt; i++ ){
  +            result.put(rsmd.getColumnName(i),rs.getObject(i));  
  +         }
  +         return  result;         
  +    }
       
  +    /**
  +     * Create an Bean from a ResultSet.
  +     * It is assumed that next() has already been called on the ResultSet.
  +     */
  +  
  +    public static Object resultSetToBean(ResultSet rs, Object obj) throws 
SQLException {
  +     
  +       try{     
  +           
  +        java.beans.BeanInfo bInfo = java.beans.Introspector.getBeanInfo(
  +                                                                  obj.getClass());
  +        java.beans.PropertyDescriptor pd[]  = bInfo.getPropertyDescriptors();
  +        
  +         ResultSetMetaData rsmd = rs.getMetaData();
  +         int cnt = rsmd.getColumnCount();
  +         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())){
  +                 try{   
  +                  pd[j].getWriteMethod().
  +                      invoke(obj, new Object[]{ rs.getObject(i) });
  +                 }catch(Exception e){
  +                   throw new DbException( "can not set " + name , e); 
  +                 }   
  +                      continue LOOP;
  +                }
  +           }
  +          throw new SQLException(name + " not found in " + obj.getClass().getName() 
); 
  +         }
  +       }catch(java.beans.IntrospectionException ie){
  +         throw new DbException(ie); 
  +       } 
  +    
  +       return obj;
  +    }
       /**
        * Create an Object array from a ResultSet.
        * It is assumed that next() has already been called on the ResultSet.
  
  
  
  1.11      +13 -3     
jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/ProcedureUtils.java
  
  Index: ProcedureUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/ProcedureUtils.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ProcedureUtils.java       16 Mar 2003 09:29:32 -0000      1.10
  +++ ProcedureUtils.java       16 Mar 2003 13:28:53 -0000      1.11
  @@ -82,6 +82,8 @@
       private static final ResultSetHandler  SCALAR_HANDLER = new ScalarHandler();
       private static final ResultSetHandler VECTOR_HANDLER = new VectorHandler();
       private static final ResultSetHandler COLLECTION_HANDLER = new 
CollectionHandler();
  +    private static final ResultSetHandler MAP_HANDLER = new MapHandler();
  +    
       private static final String UPDATE_TAG = "update";
       private static final String QUERY_TAG = "query";
       private static final String CACHE_TAG = "useCache";
  @@ -205,9 +207,13 @@
     
       private static boolean isCollection(Class cls){
      
  -       return  cls.isAssignableFrom(List.class); 
  +       return  cls.isAssignableFrom(Collection.class); 
      } 
      
  +    private static boolean isMap(Class cls){
  +   
  +       return  cls.isAssignableFrom(Map.class); 
  +   }
       
      private static boolean isVector(Class cls){
      
  @@ -290,7 +296,11 @@
               return COLLECTION_HANDLER;
           }
           
  -     
  +        if( name == null && isMap( method.getReturnType() ) ){
  +            
  +            return MAP_HANDLER;
  +        }
  +       
           
           
           
  
  
  
  1.2       +4 -1      
jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/VectorHandler.java
  
  Index: VectorHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/VectorHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- VectorHandler.java        16 Mar 2003 09:29:32 -0000      1.1
  +++ VectorHandler.java        16 Mar 2003 13:28:53 -0000      1.2
  @@ -15,9 +15,12 @@
                  
                   if (rs.next()) {
                       Object result = DbUtils.resultSetToArray(rs);
  +                    if(rs.next()){
  +                       throw new SQLException("too many results");
  +                    }
                       return result;
                   }
  -               throw new SQLException();
  +                throw new SQLException("too many results");
               }
   
       
  
  
  
  1.1                  
jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/MapHandler.java
  
  Index: MapHandler.java
  ===================================================================
  package org.apache.commons.dbutils;
  
  import java.util.*;
  import java.sql.*;
  /**
   *
   * @author  baliuka
   */
  public class MapHandler implements ResultSetHandler {
      
      /** Creates a new instance of VectorHandler */
      public MapHandler() {
      }
      
      public Object handle(java.sql.ResultSet rs, Object[] params, Object userObject) 
throws java.sql.SQLException{
                 
                  if (rs.next()) {
                      Map result = DbUtils.resultSetToMap(rs);
                      if(rs.next()){
                        throw new SQLException("too many results");
                      }
                      return result;
                  }
                  throw new SQLException("too many results");
              }
  
      
  }
  
  
  
  1.9       +14 -2     
jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/Demo.java
  
  Index: Demo.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/Demo.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Demo.java 16 Mar 2003 09:29:32 -0000      1.8
  +++ Demo.java 16 Mar 2003 13:28:53 -0000      1.9
  @@ -1,6 +1,6 @@
   
   package org.apache.commons.dbutils;
  -
  +import java.util.Map;
   /**
    * this file is used for metadata and must be in classpath at runtime
    * @author  baliuka
  @@ -48,10 +48,22 @@
       public java.util.Date now();
       
       /**
  -     [EMAIL PROTECTED] SELECT * FROM TBL  
  +     [EMAIL PROTECTED] SELECT * FROM TBL  WHERE ID=$0 
        */
       public Object[] getRow( int id );
       
  +     /**
  +     [EMAIL PROTECTED] SELECT * FROM TBL WHERE ID=$0 
  +     */
  +     public Map getRowAsMap( int id );
  +   
  +   
  +     /**
  +     [EMAIL PROTECTED] SELECT  id, name FROM TBL WHERE ID=$1 
  +     [EMAIL PROTECTED] DemoBeanHandler
  +     */
  +     public DemoBean getRowAsBean( DemoBean bean, int id );
  +   
       /**
        [EMAIL PROTECTED] SELECT * FROM {0}  
        */
  
  
  
  1.8       +5 -0      
jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/ProcedureUtilsTest.java
  
  Index: ProcedureUtilsTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/ProcedureUtilsTest.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ProcedureUtilsTest.java   16 Mar 2003 09:29:32 -0000      1.7
  +++ ProcedureUtilsTest.java   16 Mar 2003 13:28:53 -0000      1.8
  @@ -123,7 +123,12 @@
          assertTrue( demo.now()  != null  );
          assertEquals(demo.concat("A","B"), "AB" );
          assertTrue(demo.getRow(max.intValue()).length == 2 );
  +       assertTrue(demo.getRowAsMap(max.intValue()).size() == 2 );
          assertTrue(demo.getAll("TBL").size() > 2 );
  +       DemoBean bean = new DemoBean();
  +       demo.getRowAsBean(bean, max.intValue());
  +       assertTrue( bean.getId() == max.intValue()  );
  +       assertTrue( bean.getName() != null );
          
          demo.clear();
               
  
  
  
  1.1                  
jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/DemoBean.java
  
  Index: DemoBean.java
  ===================================================================
  package org.apache.commons.dbutils;
  
  /**
   *
   * @author  baliuka
   */
  public class DemoBean {
      
      /** Holds value of property id. */
      private int id;
      
      /** Holds value of property name. */
      private String name;
      
      /** Creates a new instance of DemoBean */
      public DemoBean() {
      }
      
      /** Getter for property id.
       * @return Value of property id.
       *
       */
      public int getId() {
          return this.id;
      }
      
      /** Setter for property id.
       * @param id New value of property id.
       *
       */
      public void setId(int id) {
          this.id = id;
      }
      
      /** Getter for property name.
       * @return Value of property name.
       *
       */
      public String getName() {
          return this.name;
      }
      
      /** Setter for property name.
       * @param name New value of property name.
       *
       */
      public void setName(String name) {
          this.name = name;
      }
      
  }
  
  
  
  1.1                  
jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/DemoBeanHandler.java
  
  Index: DemoBeanHandler.java
  ===================================================================
  package org.apache.commons.dbutils;
  
  /**
   *
   * @author  baliuka
   */
  public class DemoBeanHandler implements ResultSetHandler{
      
      /** Creates a new instance of DemoBeanHandler */
      public DemoBeanHandler() {
      }
      
      public Object handle(java.sql.ResultSet rs, Object[] params, Object userObject) 
throws java.sql.SQLException {
          if(rs.next()){
               Object bean = ((Object [])userObject)[0];
               DbUtils.resultSetToBean(rs, bean);
               if(rs.next()){
                 throw new java.sql.SQLException();
               }
               return bean;
               
          }
          throw new java.sql.SQLException();
          
      }    
      
  }
  
  
  

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

Reply via email to