2

我最难从 Java 运行时环境调用 Oracle 存储过程。我正在调用的存储过程有 2 个参数 1 输入和 1 输出。这是我调用存储过程的方式...如何从 Oracle ref_cursor 获取结果集

                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();
4

4 回答 4

3

您应该能够检索ResultSet

 ResultSet rSet = (ResultSet)callableStatement.getObject(2);
于 2012-10-22T16:36:01.453 回答
0

这对你有帮助吗?似乎您必须在查询结果集之前调用 getObject 并将其转换为结果集。

信用:: http://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-cursor-example/

于 2012-10-22T16:37:13.313 回答
0

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

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

然后为里面的记录迭代你的游标结果集:

           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);
            }
于 2012-10-22T16:48:07.930 回答
0

在spring框架中获取数据库游标结果很容易实现。它有内置的类,如 maprow、storedprocedure 来服务于这个目的。PFB 链接

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html#jdbc-simple-jdbc-call-1

于 2012-10-22T17:09:39.140 回答