Java 使用JDBC从存储过程中获取多条记录时获取异常

Java 使用JDBC从存储过程中获取多条记录时获取异常,java,sql,oracle,stored-procedures,jdbc,Java,Sql,Oracle,Stored Procedures,Jdbc,我使用下面的代码使用存储过程将多个记录从数据库中提取到JAVA中 public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("oracle.jdbc.OracleDriver"); Connection con=DriverManager.getConnection("xxxx", "xxxx", "xxxx"); String q

我使用下面的代码使用存储过程将多个记录从数据库中提取到JAVA中

public static void main(String[] args) throws ClassNotFoundException, SQLException {

    Class.forName("oracle.jdbc.OracleDriver");
    Connection con=DriverManager.getConnection("xxxx", "xxxx", "xxxx");
    String query="{call stud_proc(?,?)}";
    CallableStatement cstmt=con.prepareCall(query);
    cstmt.setString(1,"e001");
    cstmt.registerOutParameter(2,OracleTypes.CURSOR);
    cstmt.execute();

    ResultSet rs=(ResultSet)cstmt.getObject(2);
    while(rs.next()){
        System.out.println(rs.getString(1));
    }


}
存储过程如下所示:

CREATE OR REPLACE PROCEDURE stud_proc
(
EID_VAR IN VARCHAR2,
CUR_VAR OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN CUR_VAR FOR
SELECT ENAME FROM EMP WHERE EID=EID_VAR;
END;
我得到以下例外:

Exception in thread "main" java.sql.SQLException: Bigger type length than Maximum
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:885)
at oracle.jdbc.driver.T4CMAREngine.buffer2Value(T4CMAREngine.java:2231)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB2(T4CMAREngine.java:1048)
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:112)
at oracle.jdbc.driver.T4CTTIdcb.receiveFromRefCursor(T4CTTIdcb.java:104)
at oracle.jdbc.driver.T4CResultSetAccessor.unmarshalOneRow(T4CResultSetAccessor.java:165)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:788)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:705)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:527)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:180)
at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:783)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1028)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2888)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2979)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4103)
at prac1.Main.main(Main.java:30)
我按照此链接进行了尝试:

    String query="{call stud_proc(?,?)}";
    CallableStatement cstmt=con.prepareCall(query);
    cstmt.setString(1,"e001");
    cstmt.registerOutParameter(2,OracleTypes.CURSOR);
    cstmt.execute();


    ResultSet rs=((OracleCallableStatement)cstmt).getCursor(2);
    while(rs.next()){
        System.out.println(rs.getString(1));
}

但我还是遇到了同样的错误。这是Oracle版本的数据库相关问题吗???

您使用的是哪个版本的Oracle db,以及哪个版本的jdbc驱动程序?@OldProgrammer:Oracle database 10g Enterprise Edition 10.2.0.3.0版,Oracle JDBC驱动程序版本:10.1.0.2.0您正在引用的Oracle jar文件的名称是什么。@OldProgrammer:ojdbc14.jar