[ http://issues.apache.org/jira/browse/DERBY-186?page=history ]
Satheesh Bandaram resolved DERBY-186:
-------------------------------------
Resolution: Fixed
Fix Version: 10.1.0.0
Fix provided by Shreyas and committed to trunk version.
> isFirst() returns true when relative(x) goes beyond result set
> --------------------------------------------------------------
>
> Key: DERBY-186
> URL: http://issues.apache.org/jira/browse/DERBY-186
> Project: Derby
> Type: Bug
> Components: JDBC
> Versions: 10.0.2.0
> Environment: Windows XP SP1 Professional
> Reporter: George Baklarz
> Fix For: 10.1.0.0
>
> Bizarre error. Not sure if this is a JDBC, Derby, or Java issue.
> An opened result set has 4 records. A call to relative(3) while on row 3
> should result in isAfterLast=true, and isFirst, isBeforeFirst, and IsLast set
> to false. However, the result is isAfterLast=True and isFirst=True.
> ij
> connect 'IsAfter;create=true';
> create table x (a char(1));
> insert into x values '1','2','3','4';
> quit;
> import java.sql.*;
> public class ErrIsFirst {
> public static void main(String argv[]) throws SQLException {
> Connection conn = null;
> Statement s = null;
> ResultSet rs = null;
> String DerbyDriver = "org.apache.derby.jdbc.EmbeddedDriver";
> String returnValue;
>
> try {
> Class.forName(DerbyDriver).newInstance();
> }
> catch (Exception NoDriver) {
> System.out.println("Derby driver not found: " + DerbyDriver);
> NoDriver.printStackTrace();
> System.exit(1);
> }
> try {
> conn = DriverManager.getConnection("jdbc:derby:IsAfter");
> s =
> conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
>
> rs = s.executeQuery( "SELECT A FROM X");
> rs.next(); // First Record
> returnValue = rs.getString("A");
> System.out.println("Value="+returnValue);
>
> rs.relative(2);
> System.out.println("isFirst=" + rs.isFirst() + " isLast=" + rs.isLast()
> + " isAfterLast=" + rs.isAfterLast());
> returnValue = rs.getString("A");
> System.out.println("Value="+returnValue);
> rs.relative(-2);
> returnValue = rs.getString("A");
> System.out.println("Value="+returnValue);
> rs.relative(10);
> System.out.println("isFirst=" + rs.isFirst() + " isLast=" + rs.isLast()
> + " isAfterLast=" + rs.isAfterLast());
> returnValue = rs.getString("A");
> System.out.println("Value="+returnValue);
> rs.close();
> s.close();
> }
> catch (SQLException se) {
> String SQLState = se.getSQLState();
> String SQLMessage = se.getMessage();
> System.out.println("Error = "+SQLState);
> System.out.println(SQLMessage);
> }
> }
> }
> The results on my system are:
> Value=1
> isFirst=false isLast=false isAfterLast=false
> Value=3
> Value=1
> isFirst=true isLast=false isAfterLast=true
> Error = 24000
> Invalid cursor state - no current row.
> If you eliminate the first println call to isFirst() you get the following
> (correct) results.
> Value=1
> Value=3
> Value=1
> isFirst=false isLast=false isAfterLast=true
> Error = 24000
> Invalid cursor state - no current row.
> Okay, so where did we go wrong?
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira