| 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
![]() |
![]() |