db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Shreyas Kaushik <Shreyas.Kaus...@Sun.COM>
Subject Re: [jira] Commented: (DERBY-186) isFirst() returns true when relative(x) goes beyond result set
Date Tue, 29 Mar 2005 11:22:05 GMT
Please find the patch for this attached. I have added a test case for 
this as well.
I ran the derbyall test suite without any failures.

~ Shreyas

Shreyas Kaushik (JIRA) wrote:

>     [ http://issues.apache.org/jira/browse/DERBY-186?page=comments#action_61704 ]
>     
>Shreyas Kaushik commented on DERBY-186:
>---------------------------------------
>
>I guess the problem is not whether you make a call to isFirst() first or next. The way
a call to relative() is behaving when the param passed to it is more than the number of rows,
is what is causing the problem. 
>
>I have small fix going for this which I am still testing. Will update when I get some
results.
>
>~ Shreyas
>
>  
>
>>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
>>    
>>
>
>  
>
>>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?
>>    
>>
>
>  
>

Mime
View raw message