Oooh, you shouldn't loop over the result set in the row processor,
that is exactly what executeFetchAll will do.
Remove this loop statement:
while (rs.next())
Then everything should be fine.
On 5/4/08, Kerwin Mark Gordo <[EMAIL PROTECTED]> wrote:
> Hi Geert,
>
> Thanks for responding.
>
> Here is the code snippet:
>
> definitions: dbm is DbQueryManager object
> p is a Product object which needs to be set with its
> "dynamic" properties
> ds is the Datasource object
>
>
> Select select = new
> Select(ds).field("*").from("productpropertydata as ppd,
> propertytype as pt")
>
> .where("ppd.productID","=",productID)
> .whereAnd("ppd.propertyID = pt.id");
>
>
> PropertyRowProcessor rp = new PropertyRowProcessor();
>
> if (dbm.executeFetchAll(select,rp)){
> for (Property prop: rp.properties){
> p.setProperty(prop);
> }
> }
>
>
> // definition of PropertyRowProcessor
> class PropertyRowProcessor extends DbRowProcessor {
> public ArrayList<Property> properties = new ArrayList<Property>();
>
> public boolean processRow(ResultSet rs) throws SQLException {
> try {
> while (rs.next()){
> PropertyType pType = new PropertyType();
> ....
>
>
> Property property = new Property(pType);
> property.setName(name);
> property.setValue(rs.getString("value"));
>
> properties.add(property);
> }
> return true;
> } catch (SQLException e){
> return false;
> }
> }
> }
>
>
> I pasted the sql query string of the Select object select into phpmyadmin
> tool and it returned 2 rows which is what I expect. When I debugged the code
> above and stepped line by line inside the while(rs.next()) loop of
> PropertyRowProcessor it only looped once. I looked
> into the resultset object and I don't pretty much understand its internals.
>
> After many failed trials I tried to do the "traditional" way of querying the
> database and used the following code:
>
> Select select = new
> Select(ds).field("*").from("productpropertydata as ppd,
> propertytype as pt")
>
> .where("ppd.productID","=",productID)
> .whereAnd("ppd.propertyID = pt.id");
>
>
> PropertyRowProcessor rp = new PropertyRowProcessor();
>
> DbStatement dbst =
> ds.getConnection().createStatement();
> dbst.executeQuery(select);
> rp.processRow(dbst.getResultSet());
> for (Property prop: rp.properties){
> p.setProperty(prop);
> }
>
> Alas this code worked! the resultset object passed to the processRow
> function looped twice!
>
> Thanks, I hope that you could clarify on this matter.
>
> Kerwin
>
>
>
> On Thu, May 1, 2008 at 5:54 PM, Geert Bevin <[EMAIL PROTECTED]> wrote:
> >
> > Hi Kerwin,
> >
> > Very weird, I didn't get this message through email.
> >
> > Could you please paste the code that you're using. My initial thought
> > would be that you return false from with the DbRowProcessor, this
> > interrupt the retrieval. I can say you that that in the tenths of
> > applications that I have written, executeFetchAll has always worked
> > correctly and the unit tests assert it too. You might have stumbled
> > into an edge case where it doesn't, but in that case I need more
> > information to be able to track it down and reproduce it.
> >
> > HTH,
> >
> > Geert
> >
> >
> >
> >
> > On Apr 26, 11:06 am, Kerwin <[EMAIL PROTECTED]> wrote:
> > > Hi All,
> > >
> > > I'm new to RIFE and lately I've been trying to use DbQueryManager
> > > class specifically executeFetchAll function. The problem is when I
> > > iterate through the ResultSet object passed to a subclass of
> > > DbRowProcessor it only loops once when I expected it will loop twice.
> > >
> > > I'm confused because if I use the traditional jdbc way of getting the
> > > ResultSet object using the same query and using DbConnection,
> > > DbStatement and DbResultSet classes I get the correct no. of rows I
> > > expect and loops twice through DbResultSet.
> > >
> > > Thanks
> > > Kerwin
> >
> >
>
>
> >
>
--
Geert Bevin
Terracotta - http://www.terracotta.org
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Music and words - http://gbevin.com
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"rife-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rife-users?hl=en
-~----------~----~----~----~------~----~------~--~---