Subject: Re: DynaBeans, DynaClass, DynaMen
From: "Vic C." <[EMAIL PROTECTED]>
 ===
Sorry, excited: I see:
DynaProperty.getType() ;
So based on it I can get the type, and create an "UPDATE TABLE SET X = Y 
  WHERE Z=K" in a base class. Cool.
I wonder about original values.... for a reset, etc.

Vic

Vic C. wrote:
> 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