2012-10-22 52 views
0

我从Java运行时环境中调用Oracle存储过程的难度最大。我正在调用的存储过程有2个参数1进1出。下面是我如何调用存储过程...你如何从Oracle ref_cursor从Java中的存储过程获取结果

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

回答

1

您应该能够检索ResultSet与获得ResultSet中:

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

为什么getObject(2)?我正在尝试getObject(1)。这是要求第二个参数吗? – SoftwareSavant

+0

@DmainEvent因为OUT参数位于第二个位置:'registerOutParameter(2,OracleTypes.CURSOR)' –

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); 
      } 
相关问题