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