« Return to Thread: DbQueryManager bug?
Re: DbQueryManager bug?
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
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "rife-users" group.
To post to this group, send email to rife-users@...
To unsubscribe from this group, send email to rife-users-unsubscribe@...
For more options, visit this group at http://groups.google.com/group/rife-users?hl=en
-~----------~----~----~----~------~----~------~--~---
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 <gbevin@...> 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 <kerwingo...@...> 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 rife-users@...
To unsubscribe from this group, send email to rife-users-unsubscribe@...
For more options, visit this group at http://groups.google.com/group/rife-users?hl=en
-~----------~----~----~----~------~----~------~--~---
« Return to Thread: DbQueryManager bug?
| Free Forum Powered by Nabble | Forum Help |
