从Java中的存储过程返回结果

时间:2012-10-22 16:33:20

标签: java oracle11g

我最难从Java运行时环境调用Oracle存储过程。我正在调用的存储过程有2个参数1进1出。以下是我如何调用存储过程...如何从Oracle ref_cursor

获取resultSet
                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 个答案:

答案 0 :(得分:2)

您应该可以使用

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

答案 1 :(得分:0)

这对你有帮助吗?看起来你必须在查询结果集之前调用getObject并将其强制转换为结果集。

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

答案 2 :(得分: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);
            }

答案 3 :(得分: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