Hello!
Do you have a repeatable test case I could use? Maybe you can also send me a 
jdbc-trace (http://sapdb.2scale.net/moin.cgi/JdbcTrace) to understand how your 
application uses the jdbc driver.

Thanks,
Marco
----------------------------------------------
Marco PASKAMP
SAP DB, SAP Labs Berlin

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Freitag, 24. Oktober 2003 01:48
> To: Schroeder, Alexander; [EMAIL PROTECTED]
> Subject: [JDBC] Bug in last()/getRow() ?
> 
> 
> Hello
> 
> I use todays JDBC-Driver (Implementation-Version: 7.4.4, Build
> 003-000-157-173) and found a bug (I think it is one) when trying to
> detect the number of rows by calling the two methods
> 
>       boolean last = rs.last();
>       count = rs.getRow();
> 
> last: false (this is not incorrect), but
> count: should be >500 in my case, but is 0.
> 
> While this usually works perfect, it does not for the exactly same
> sql-query/statement. It seems to depend on a state but I have 
> no idea on
> which one. To be sure that the resultset really contains all the rows
> (several hundreds) I first called rs.next() three times and 
> checked the
> resultset (rs.getString(1) returnd the correct values for the first
> three rows for example).
> 
> While it is correct that last() returns false, rs.getRow() 
> should return
> a number > 500 in my case (this usually happens but in rare 
> cases not).
> 
> Here are some other values returned by the ResultSet-Object used:
> 
> rs.isBeforeFirst(): false
> rs.isFirst(): false
> rs.getRow(): 3 // we are on the third row (of many rows), that's
> correct.
> rs.last(): false // is NOT incorrect
> rs.getType(): 1005 //default
> rs.getRow(): 0  // HERE IS THE PROBLEM
> rs.last(): false // repeated call returns the same values.
> rs.getRow(): 0  // HERE IS THE PROBLEM
> 
> 
> I guess it was best to add some debugging code into 
> ResultSetSapDB.java
> to find out which of all the cases that are considered within the
> implementation of the methods last() and getRow() causes that 
> behaviour.
> If necessary, we'll do that.
> 
> Thanks for any comment.
> 
> G. Matter
> Invoca Systems
> 
> "Schroeder, Alexander" schrieb:
> > 
> > Hi,
> > 
> > > Hi,
> > >
> > > how can i get the number of rows returned by
> > >    PreparedStatement s = "...";
> > >    ResultSet r = s.executeQuery();
> > >
> > > I currently use
> > >    int count;
> > >    if (r.isAfterLast())
> > >      count = 0;
> > 
> > This is wrong, as JDBC says for isAfterLast:
> > 
> >    Returns true if the cursor is after the last row; false
> >    if the cursor is at any other position or the result set contains
> >    no rows.
> > 
> > Also, if there are no rows, getRow() returns 0 immediately, 
> and calling 'last' does
> > not harm.
> > 
> > >    else
> > >    {
> > >      r.last();
> > >      count = r.getRow();
> > >    }
> > >
> > > My hope is, that last() instructs the kernel to move the
> > > cursor to the
> > > last row, and therefor the traffic won't be that much.
> > 
> > Yes, but *only* this. Actually calling 'getRow' while being
> > on the 'last' row uses some tricks, which may or may not
> > be performant enough. Its performance depends heavily on
> > the particular strategy chosen by the database to create
> > the result, and what you have done on the result before.
> > (Fetching through the result, and afterwards using that
> > sequence above is quite more performant as doing it as
> > first operation).
> > 
> > > Is there a more sapdb-optimized version to get the number of rows
> > > returned by a select-statement?
> > 
> > No. If you look at other DBMS', you will see that getRow() is
> > always relatively expensive.
> > 
> > If you want only the number, there is no need for selecting the
> > data => use a "SELECT COUNT(...) ...",
> > if you need to handle the data you have to live with the fact that
> > DBMS usually only know the result count when they have built up
> > the result completely.
> > 
> > Regards
> > Alexander Schröder
> > SAP Labs Berlin
> > _______________________________________________
> > sapdb.general mailing list
> > [EMAIL PROTECTED]
> > http://listserv.sap.com/mailman/listinfo/sapdb.general
> 
> -- 
> MaxDB Discussion Mailing List
> For list archives: http://lists.mysql.com/maxdb
> To unsubscribe:    
http://lists.mysql.com/[EMAIL PROTECTED]

-- 
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to