Subject: Re: DynaBeans, DynaClass, DynaMen From: "Vic C." <[EMAIL PROTECTED]> === I am so over all this. (I have a basejDAO project on SourceForge... that will take a SQL string and expose CRUD methods, that might use this). Very Cool.
Vic Craig R. McClanahan wrote: > > On Fri, 12 Jul 2002, Struts Newsgroup wrote: > > >>Date: Fri, 12 Jul 2002 18:40:02 -0700 >>From: Struts Newsgroup <[EMAIL PROTECTED]> >>Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]> >>To: [EMAIL PROTECTED] >>Subject: Re: DynaBeans, DynaClass, DynaMen >> >>Subject: Re: DynaBeans, DynaClass, DynaMen >>From: "Vic C." <[EMAIL PROTECTED]> >> === >>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. > > > All DynaBean implementations support metadata. From a particular DynaBean > instance you can say something like: > > DynaProperty descriptors[] = dynaBean.getDynaClass().getDynaProperties(); > > and iterate through the descriptors to see what is there, very similar to > what you can do with standard JavaBeans by calling: > > PropertyDescriptor descriptors[] = > PropertyUtils.getPropertyDescriptors(javabean); > > >>Where is DynaBean? Commons? > > > Yep. It's part of the commons-beanutils package. Most recent nightly > builds (which are also packaged with nightly builds of Struts) are at: > > http://jakarta.apache.org/builds/jakarta-commons/nightly/commons-beanutils/ > > The new feature discussed below will be in tomorrow's (20020713) build. > > >>Vic >> > > > Craig > > > >>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]> >> >> > > > -- > 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]>