2012-10-22 50 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); 
      } 
相關問題