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]>