Subject: Re: DynaBeans, DynaClass, DynaMen
From: "Vic C." <[EMAIL PROTECTED]>
 ===
And... can we give it a datasource argument (instead of con) and use 
RowSet instead of ResultSet?

Vic

Vic C. wrote:
> Looks a bit like 
> http://www.javaworld.com/javaworld/jw-02-2001/jw-0202-cachedrow.html 
> listing #3  of disconnected row set.
> 
> Can we get metaData out of it so I can write "auto" updates?
> So a DAO that has a Iterator of DynaBeans.
> Where is DynaBean? Commons?
> 
> Vic
> 
> Craig R. McClanahan wrote:
> 
>> I implemented something a little more memory-efficient than this (doesn't
>> require the entire result set to be in memory) in tonight's nightly build
>> of commons-beanutils, which will therefore be available in the 20020713
>> nightly build of Struts.  You use it something like this:
>>
>>   Connection conn = ...;
>>   Statement stmt = conn.createStatement();
>>   ResultSet rs = stmt.executeQuery("select * from customers");
>>   Iterator rows = (new ResultSetDynaClass(rs)).iterator();
>>   while (rows.hasNext()) {
>>     DynaBean row = (DynaBean) rows.next();
>>     System.out.println("Processing customer " + row.get("account_id"));
>>     ... access this row as a DynaBean ...
>>   }
>>   rs.close();
>>   stmt.close();
>>
>> I elected to avoid doing the type conversions, so the properties you get
>> back will correspond to their types in the database.
>>
>> Craig
>>
>>
>> On Fri, 12 Jul 2002 [EMAIL PROTECTED] wrote:
>>
>>
>>> Date: Fri, 12 Jul 2002 13:56:38 -0400
>>> From: [EMAIL PROTECTED]
>>> Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]>
>>> To: [EMAIL PROTECTED]
>>> Subject: RE: DynaBeans, DynaClass, DynaMen
>>>
>>>
>>>
>>> Here is what I am using...  Very simple and only returns strings...
>>>
>>>
>>>  /**
>>>    * Converts a resultset into an ArrayList of DynaBeans
>>>    *
>>>    * @param resultSet SQL result set to be converted
>>>    * @return ArrayList of DynaBeans with all columnnames converted to
>>>    *         lowercase
>>>    * @throws SQLException DOCUMENT ME!
>>>    */
>>>   private static ArrayList getDynaBeanArrayList(ResultSet resultSet)
>>>                                          throws SQLException {
>>>
>>>      ResultSetMetaData metaData = resultSet.getMetaData();
>>>      int cols = metaData.getColumnCount();
>>>      ArrayList list = new ArrayList();
>>>      DynaProperty[] props = new DynaProperty[cols];
>>>      BasicDynaClass dClass = null;
>>>
>>>      for (int i = 1; i <= cols; i++) {
>>>         props[i - 1] = new
>>> DynaProperty(metaData.getColumnName(i).toLowerCase());
>>>      }
>>>
>>>      try {
>>>         dClass = new BasicDynaClass("test",
>>>                                     Class.forName(
>>>
>>> "org.apache.commons.beanutils.BasicDynaBean"),
>>>                                     props);
>>>      } catch (Exception e) {
>>>         e.printStackTrace();
>>>      }
>>>
>>>      while (resultSet.next()) {
>>>
>>>         HashMap map = new HashMap(cols, 1);
>>>
>>>         for (int i = 1; i <= cols; i++) {
>>>            map.put(metaData.getColumnName(i).toLowerCase(),
>>>                    resultSet.getString(i));
>>>         }
>>>
>>>         try {
>>>
>>>            DynaBean dbean = dClass.newInstance();
>>>            BeanUtils.populate(dbean, map);
>>>            list.add(dbean);
>>>         } catch (Exception e) {
>>>            e.printStackTrace();
>>>            throw new SQLException("RequestUtils.getArrayList: "
>>>                                   + e.toString());
>>>         }
>>>      } // End While
>>>
>>>      return (list);
>>>   }
>>>
>>>
>>> -----Original Message-----
>>> From: craigmcc [mailto:[EMAIL PROTECTED]]
>>> Sent: Friday, July 12, 2002 12:07 PM
>>> To: struts-user
>>> Subject: Re: DynaBeans, DynaClass, DynaMen
>>>
>>>
>>>
>>>
>>> On Fri, 12 Jul 2002, Thorbjoern Ravn Andersen wrote:
>>>
>>>
>>>> Date: Fri, 12 Jul 2002 07:02:57 +0200
>>>> From: Thorbjoern Ravn Andersen <[EMAIL PROTECTED]>
>>>> Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]>
>>>> To: Struts Users Mailing List <[EMAIL PROTECTED]>
>>>> Subject: Re: DynaBeans, DynaClass, DynaMen
>>>>
>>>> [EMAIL PROTECTED] skrev:
>>>>
>>>>
>>>>> ...anyone remember DynaMen?
>>>>>
>>>>> Anyhow...  I got a Dynabean mechanism working that builds a DynaBean
>>>>> based on the metadata of a SQL result set, populates and array of the
>>>>> little buggers and passes it back to me.  For displaying I have a tag
>>>>> library that does not like a call to get('name') as the field name.
>>>>> What is the best way to get around this?
>>>>>
>>>>
>>>> I wrote an AnonyBeans package which uses BCEL to generate beans on the
>>>> fly based on a ResultSet.  It is alpha code but works for me, and is
>>>> usable anywhere where you need a real traditional bean, but where you
>>>
>>>
>>> do
>>>
>>>> not want to serialize it or  use its type in Java source.
>>>>
>>>> Is this interesting?
>>>>
>>>
>>> I think it would be  interestesting, even though it might not be
>>> universally useful (some containers won't let you introduce new classes
>>> at
>>> runtime).
>>>
>>> I'd also be interested in a mechanism that converted a ResultSet into a
>>> custom DynaClass, with a corresponding DynaBean for each row.  This
>>> would
>>> be trivially simple to do -- so simple that it probably makes a
>>> worthwhile
>>> addition to commons-beanutils itself if someone wanted to take this on.
>>>
>>> This wouldn't help you create dynamic input forms, but it would make a
>>> completely flexible bean-like wrapper around a result set so you can use
>>> Struts tags to display stuff.
>>>
>>>
>>>> -- 
>>>>  Thorbjørn Ravn Andersen                 http://biobase.dk/~tra
>>>
>>>
>>> Craig
>>>
>>>
>>> -- 
>>> To unsubscribe, e-mail:
>>> <mailto:[EMAIL PROTECTED]>
>>> For additional commands, e-mail:
>>> <mailto:[EMAIL PROTECTED]>
>>>
>>>
>>>
>>> -- 
>>> To unsubscribe, e-mail:   
>>> <mailto:[EMAIL PROTECTED]>
>>> For additional commands, e-mail: 
>>> <mailto:[EMAIL PROTECTED]>
>>>
>>>
>>
>>
>> -- 
>> To unsubscribe, e-mail:   
>> <mailto:[EMAIL PROTECTED]>
>> For additional commands, e-mail: 
>> <mailto:[EMAIL PROTECTED]>
>>
> 


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

Reply via email to