You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Mark Shifman <ma...@yale.edu> on 2005/04/25 15:03:44 UTC

Re: [DbUtils] Question about BeanProcessor

Hi:
 From http://jakarta.apache.org/commons/dbutils/examples.html

QueryRunner run = new QueryRunner(dataSource);

// Use the BeanHandler implementation to convert the first
// ResultSet row into a Person JavaBean.
ResultSetHandler h = new BeanHandler(Person.class);

// Execute the SQL statement with one replacement parameter and
// return the results in a new Person object generated by the BeanHandler.
Person p = (Person) run.query(
    "SELECT * FROM Person WHERE name=?", "John Doe", h);

This works just fine and you don't really need to do anything fancy.

The source code is here 
http://svn.apache.org/viewcvs.cgi/jakarta/commons/proper/dbutils/trunk/src/java/org/apache/commons/dbutils/
and shows how they do everything.

I am using LazyDynaBeans (org.apache.commons.beanutils.LazyDynaBean) so 
I wrote my own processor and handler, see below:

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.beanutils.LazyDynaBean;

public class LazyDynaBeanProcessor {

    public Object toBean(ResultSet rs) throws SQLException {
        LazyDynaBean ldb = new LazyDynaBean();
        ResultSetMetaData rsmd = rs.getMetaData();
        for (int i = 1; i <= rsmd.getColumnCount(); i++) {
            String name = rsmd.getColumnName(i).toLowerCase();
            Object thecol =rs.getObject(i);
            if(thecol  == null)   //my weirdness if null make the null 
string
                ldb.set(name, "");
            else
                ldb.set(name, rs.getObject(i));
        }
        return ldb;
    }

    public Object toBeanList(ResultSet rs) throws SQLException {
        List results = new ArrayList();
        while (rs.next()) {
            results.add(this.toBean(rs));
        }

        return results;
    }
}
---------------

import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbutils.ResultSetHandler;

public class LazyDynaBeanHandler implements ResultSetHandler{
   
    private LazyDynaBeanProcessor convert = new LazyDynaBeanProcessor();
   
    public Object handle(ResultSet rs) throws SQLException{
        return rs.next() ? convert.toBean(rs) : null;
    }      
}
---------
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbutils.ResultSetHandler;

public class LazyDynaBeanListHandler implements ResultSetHandler{
   
    private LazyDynaBeanProcessor convert = new LazyDynaBeanProcessor();
   
    public Object handle(ResultSet rs) throws SQLException{
        return convert.toBeanList(rs);
    }
       

}
Sascha Meyer wrote:

> Hi there,
>
> I'd like to use the BeanProcessor found in org.apache.commons.dbutils, 
> but I haven't found any examples of how to populate a bean through the 
> BeanProcessor ... especially the second parameter (java.lang.Class 
> type) of the method "toBean" confuses me, because I couldn't find any 
> info what exactly should be passed to the method.
>
> Could you give me a short usage example?
>
> Thank you!
>
> Sascha
>
>
> ---
> avast! Antivirus: Ausgehende Nachricht sauber.
> Virus-Datenbank (VPS): 0516-7, 22.04.2005
> Getestet um: 25.04.2005 12:05:45
> avast! - copyright (c) 2000-2004 ALWIL Software.
> http://www.avast.com
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
>


-- 
 Mark Shifman MD. Ph.D.
 Yale Center for Medical Informatics
 Phone (203)737-5219
 mark.shifman@yale.edu


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org