Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.tools -> Re: ArrayIndexOutOfBounds in Oracle8i 8.1.7 JDBC Drivers and Ref Cursor
The problem seems to be in the drivers' handling of LONG RAW fields.
Duplication Information
Here is a simple duplication path:
DROP TABLE BUGSAMPLE
/
CREATE TABLE BUGSAMPLE (
TESTINT INT NOT NULL,
TESTSTRING VARCHAR(20),
TESTBIN LONG RAW,
CONSTRAINT PK_BUGSAMPLE PRIMARY KEY(TESTINT)
)
/
CREATE OR REPLACE VIEW BUGVIEW AS
SELECT TESTINT, TESTSTRING FROM BUGSAMPLE;
CREATE OR REPLACE PACKAGE CURTYPES
AS
TYPE BUGSAMPCURTYPE IS REF CURSOR RETURN BUGSAMPLE%ROWTYPE;
TYPE BUGSAMPVIEWCURTYPE IS REF CURSOR RETURN BUGVIEW%ROWTYPE;
END;
/
CREATE OR REPLACE FUNCTION Q_BUGSAMPLE RETURN CURTYPES.BUGSAMPCURTYPE AS
c1 CURTYPES.BUGSAMPCURTYPE;
BEGIN
OPEN c1 FOR SELECT * FROM BUGSAMPLE;
RETURN c1;
END;
/
CREATE OR REPLACE FUNCTION Q2_BUGSAMPLE RETURN CURTYPES.BUGSAMPVIEWCURTYPE
AS
c1 CURTYPES.BUGSAMPVIEWCURTYPE;
BEGIN
OPEN c1 FOR SELECT * FROM BUGVIEW;
RETURN c1;
END;
/
INSERT INTO BUGSAMPLE(TESTINT, TESTSTRING) VALUES(1, 'TEST1')
/
INSERT INTO BUGSAMPLE(TESTINT, TESTSTRING) VALUES(2, 'TEST2')
/
INSERT INTO BUGSAMPLE(TESTINT, TESTSTRING) VALUES(3, 'TEST3')
/
INSERT INTO BUGSAMPLE(TESTINT, TESTSTRING, TESTBIN) VALUES(4, 'TEST4',
'1123412341')
/
2) Here is a sample java class to run:
package bugsample;
import java.sql.*;
import oracle.jdbc.driver.*;
public class bugTest
{
public static void main( String args[] ) { String url = "jdbc:oracle:thin:@nomadlap:1521:NomadDb"; String className = "oracle.jdbc.driver.OracleDriver"; try {
Class.forName(className).newInstance(); Connection con = DriverManager.getConnection(url, "nomad", "password"); try { CallableStatement stmt = con.prepareCall("{? = call Q_BUGSAMPLE()}"); try { stmt.registerOutParameter(1, OracleTypes.CURSOR); stmt.execute(); ResultSet rs = (ResultSet)stmt.getObject(1); while (rs.next()) { System.out.println(rs.getInt(1) + "-" + rs.getString(2)); } } finally { stmt.close(); } } finally { con.close(); }
}
Running it results in:
1-TEST1
java.lang.ArrayIndexOutOfBoundsException: 1
at oracle.jdbc.ttc7.NonPlsqlTTCColumn.unmarshal(NonPlsqlTTCColumn.java)
at
oracle.jdbc.ttc7.NonPlsqlTTCDataSet.unmarshalRow(NonPlsqlTTCDataSet.java)
at oracle.jdbc.ttc7.TTIrxd.unmarshal(TTIrxd.java)
at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java)
at
oracle.jdbc.driver.OracleStatement.fetchNextColumns(OracleStatement.java)
at oracle.jdbc.driver.OracleInputStream.needBytes(OracleInputStream.java)
at oracle.jdbc.driver.OracleInputStream.close(OracleInputStream.java)
at
oracle.jdbc.driver.OracleResultSetImpl.prepare_for_new_row(OracleResultSetIm
pl.java)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java)
at bugsample.bugTest.main(bugTest.java:33)
Notes
This is a serious bug - does Oracle monitor this site? Help! Received on Mon Apr 09 2001 - 19:14:32 CDT
![]() |
![]() |