(COPY)
public static int storedProcWithResultSet (String parms) throws Exception
  // Stored procedure to be called.
  CallableStatement cs = conn.prepareCall
   ("{? = call mypackage.p_astoreproc (?,?,?,?,?,?,?)}");   // register input parameters
  cs.setString(2, "");   
  cs.setString(3, "");    
  cs.setString(4, parms);    
  // regsiter ouput parameters 
  cs.registerOutParameter(5, java.sql.Types.CHAR);    
  cs.registerOutParameter(6, java.sql.Types.CHAR);    
  cs.registerOutParameter(7, java.sql.Types.CHAR);      // Procedure execution 
  ResultSet rs = cs.executeQuery();  // Note that you need to retrieve the ResultSet _before_ retrieving
  // OUTPUT parameters.
  if ( rs == null)
    System.out.println( "No resultSet!"); 
  else { 
    // To retrieve columns info.
    ResultSetMetaData rsmd = rs.getMetaData(); 
    int nbCol = rsmd.getColumnCount(); 
           
    int i = 0; 
    int j = 1; 
            
    Vector vResSet = new Vector(); 
    while (rs.next ()) { 
      System.out.println( "Record " + (i+1)); 
      // putting the ResultSet columns in a vector
      for ( j = 1; j <= nbCol ; j++){ 
        vResSet.insertElementAt(rs.getString(j), 0); 
        vResSet.addElement(rs.getString(j));
        }       // Reading vector to print ResultSet data
      for ( int k = 0 ; k < nbColonnes ; k++ ) { 
      if ( vResSet.elementAt(k) != null) 
          System.out.println( vResSet.elementAt(k).toString()); 
      else 
          System.out.println( "Column " + (k+1) + " Null"); 
          } 
      i++; 
      } 
     }      // Retrieving Strored Procedure OUTPUT parameters
     System.out.println( "return code of Stored procedure = : " + cs.getInt(1));
       
     //  Retrieving OUTPUT parameters
     for ( int i = 5 ; i <= 7; i ++)    
       System.out.println( "parameter " + i + " : " + cs.getString(i));      return cs.getInt(1); 
 } 

解决方案 »

  1.   

    不同数据库可能不同
    CallableStatement cs = myCon.prepareCall("{call procedureName");
    ResultSet = cs.getResultSet();
      

  2.   

    (COPY)
    String query = "begin thePackage.theProcedure(?,?,?); end;";
    CallableStatement cs = conn.prepareCall(query);
    cs.setString(1, "string parameter");         // #1 is INPUT
    cs.setInt(2, 1);                             // #2 is INPUT 
    cs.registerOutParameter(2, Types.INTEGER);   //   and OUTPUT 
    cs.registerOutParameter(3, Types.INTEGER);   // #3 is OUTPUT
    cs.execute();int output_parm2 = cs.getInt(2);   // get the result from OUTPUT #2
    int output_parm3 = cs.getInt(3);   // get the result from OUTPUT #3
      

  3.   

    先谢谢各位
    to skyyoung:
        我需要取的是stored procedure里的return值,而不是OUTPUT参数。
    看你贴的程序好像都是用的OUTPUT参数呀?
    thanks again
      

  4.   

    只是换一种写法而已:对于使用output参数:你的存储过程名称(?,?,?,?)
    你可以指定哪一个是output.对于return值:?=你的存储过程名称(?,?,?)
    然后把第一个参数设为output,即为所需要的return值。