DbQueryManager bug?

View: New views
5 Messages — Rating Filter:   Alert me  

DbQueryManager bug?

by Kerwin-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


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


Re: DbQueryManager bug?

by Geert Bevin :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


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


Re: DbQueryManager bug?

by Kerwin-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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


Re: DbQueryManager bug?

by Geert Bevin :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


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 <kerwingordo@...> 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 <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
> >
> >
>
>
> >
>


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


Re: DbQueryManager bug?

by Kerwin-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks Geert!


On Sun, May 4, 2008 at 4:10 PM, Geert Bevin <gbevin@...> wrote:

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 <kerwingordo@...> 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 <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
> >
> >
>
>
> >
>


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

 
 
 
Google
rifers.org web