从Java中的存储过程获取结果

从Java中的存储过程获取结果,java,oracle11g,Java,Oracle11g,我最难从java运行时环境调用Oracle存储过程。我正在调用的存储过程有两个参数1 in和1 out。下面是我如何调用存储过程。。。如何从Oracle参考光标获取结果集 ds = (DataSource)initialContext.lookup("JDBC/EPCD13DB"); conn = ds.getConnection(); callableStatement = conn.prepare

我最难从java运行时环境调用Oracle存储过程。我正在调用的存储过程有两个参数1 in和1 out。下面是我如何调用存储过程。。。如何从Oracle参考光标获取结果集

                ds = (DataSource)initialContext.lookup("JDBC/EPCD13DB");
                conn = ds.getConnection();
                callableStatement = conn.prepareCall(storedProcCall);
                callableStatement.setString(1, input1);
                callableStatement.registerOutParameter(2, OracleTypes.CURSOR);                      
                callableStatement.execute();//(ResultSet) callableStatement.getObject(1);
                ResultSet rs = callableStatement.getResultSet();
                while(rs.next()){
                    Provider tempProv = new Provider();
                    tempProv.setResourceId(rs.getLong("res_id"));
                    tempProv.setFirstName(rs.getString("First_Name"));
                    tempProv.setLastName(rs.getString("Last_Name"));
                    tempProv.setMiddleName(rs.getString("Middle_Name"));
                    ObjList.add(tempProv);
                }
                rs.close();

您应该能够通过以下方式检索
结果集

 ResultSet rSet = (ResultSet)callableStatement.getObject(2);

这对你有帮助吗?在查询结果集之前,似乎必须调用getObject并将其强制转换到结果集中


信用证::

我相信它只返回一个输出(
oracle cursor

然后迭代游标结果集以查找其中的记录:

           while(rs.next()){
                Provider tempProv = new Provider();
                tempProv.setResourceId(rs.getLong("res_id"));
                tempProv.setFirstName(rs.getString("First_Name"));
                tempProv.setLastName(rs.getString("Last_Name"));
                tempProv.setMiddleName(rs.getString("Middle_Name"));
                ObjList.add(tempProv);
            }

在spring框架中,可以很容易地获取数据库游标结果。它有内置的类,如maprow、storedprocedure,以实现此目的。PFB链接


为什么选择getObject(2)?我正在尝试getObject(1)。这是在请求第二个参数吗?@DmainEvent,因为OUT参数位于第二个位置:
registerOutParameter(2,OracleTypes.CURSOR)
           while(rs.next()){
                Provider tempProv = new Provider();
                tempProv.setResourceId(rs.getLong("res_id"));
                tempProv.setFirstName(rs.getString("First_Name"));
                tempProv.setLastName(rs.getString("Last_Name"));
                tempProv.setMiddleName(rs.getString("Middle_Name"));
                ObjList.add(tempProv);
            }