Обсуждение: Bug in ResultSet.moveToCurrentRow

Поиск
Список
Период
Сортировка

Bug in ResultSet.moveToCurrentRow

От
Darin Ohashi
Дата:
I believe there is a bug in ResultSet.moveToCurrentRow with pgsql 7.3.3 and
pgsql-jdbc 7.3.3 build 110.  If the current row of the result set is the
beforeFirst() row, call moveToInsertRow() and then moveToCurrentRow().  The
moveToCurrentRow throws an ArrayIndexOutOfBoundsException.

Here is code to reproduce the problem:

import java.sql.*;
import java.util.*;
import java.lang.*;

class SQLBug
{
    public static void main( String args[] )
        throws Exception
    {
        Properties prop;
        Driver driver;
        Connection con;
        Statement stat;
        ResultSet rs;

        driver = (Driver)Class.forName( "org.postgresql.Driver" ).newInstance();

        prop = new Properties();

        prop.setProperty( "user", "test" );
        prop.setProperty( "password", "test" );
        con = driver.connect( "jdbc:postgresql://localhost:5432/Test", prop );

        stat = con.createStatement();

        stat.executeUpdate( "CREATE TABLE sqlbug ( id INTEGER, PRIMARY KEY (id)
)" );

        stat.executeUpdate( "INSERT INTO sqlbug(id) VALUES( 1 )" );
        stat.executeUpdate( "INSERT INTO sqlbug(id) VALUES( 2 )" );
        stat.executeUpdate( "INSERT INTO sqlbug(id) VALUES( 3 )" );

        rs = stat.executeQuery( "SELECT * FROM sqlbug WHERE id = 2" );

        rs.moveToInsertRow();

        /* the following call throws an ArrayIndexOutOfBounds */

        rs.moveToCurrentRow();
    }
}

The Exception looks like this:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 < 0
        at java.util.Vector.elementAt(Vector.java:437)
        at
org.postgresql.jdbc2.AbstractJdbc2ResultSet.moveToCurrentRow(AbstractJdbc2Result
Set.java:674)
        at SQLBug.main(SQLBug.java:42)

Darin

Re: Bug in ResultSet.moveToCurrentRow

От
Kris Jurka
Дата:

On Tue, 17 Jun 2003, Darin Ohashi wrote:

>
> I believe there is a bug in ResultSet.moveToCurrentRow with pgsql 7.3.3 and
> pgsql-jdbc 7.3.3 build 110.  If the current row of the result set is the
> beforeFirst() row, call moveToInsertRow() and then moveToCurrentRow().  The
> moveToCurrentRow throws an ArrayIndexOutOfBoundsException.
>

This patch against cvs fixes the problem.  Thanks for the report and
complete example.

Kris Jurka

Вложения

Re: Bug in ResultSet.moveToCurrentRow

От
Barry Lind
Дата:
Patch applied.

thanks,
--Barry


Kris Jurka wrote:
>
> On Tue, 17 Jun 2003, Darin Ohashi wrote:
>
>
>>I believe there is a bug in ResultSet.moveToCurrentRow with pgsql 7.3.3 and
>>pgsql-jdbc 7.3.3 build 110.  If the current row of the result set is the
>>beforeFirst() row, call moveToInsertRow() and then moveToCurrentRow().  The
>>moveToCurrentRow throws an ArrayIndexOutOfBoundsException.
>>
>
>
> This patch against cvs fixes the problem.  Thanks for the report and
> complete example.
>
> Kris Jurka
>
>
> ------------------------------------------------------------------------
>
> Index: src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java,v
> retrieving revision 1.19
> diff -c -r1.19 AbstractJdbc2ResultSet.java
> *** src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java    3 May 2003 20:40:45 -0000    1.19
> --- src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java    29 Jun 2003 07:09:07 -0000
> ***************
> *** 687,696 ****
>               throw new PSQLException( "postgresql.updateable.notupdateable" );
>           }
>
> !         this_row = (byte[][]) rows.elementAt(current_row);
>
> !         rowBuffer = new byte[this_row.length][];
> !         System.arraycopy(this_row, 0, rowBuffer, 0, this_row.length);
>
>           onInsertRow = false;
>           doingUpdates = false;
> --- 687,701 ----
>               throw new PSQLException( "postgresql.updateable.notupdateable" );
>           }
>
> !         if (current_row < 0) {
> !             this_row = null;
> !             rowBuffer = null;
> !         } else {
> !             this_row = (byte[][]) rows.elementAt(current_row);
>
> !             rowBuffer = new byte[this_row.length][];
> !             System.arraycopy(this_row, 0, rowBuffer, 0, this_row.length);
> !         }
>
>           onInsertRow = false;
>           doingUpdates = false;
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>                http://archives.postgresql.org