我最难从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();
答案 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链接