5.java 调用存储过程 返回一个结果集成功的案例。 final

1.必须使用CallableStatement cs  ( 调用存储过程专用的 statment)

2.当存错过程有返回值时,必须先制定 返回值的类型

3.如果返回值类型是一个结果集,那么必须  CallableStatement 的返回参数类型要设置成游标类型的。

     cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);  //2.因为要返回的类型是

4.然后 从 cs中cs.getObject(1)结果集  ,get结果集时,从1这个索引位置开始get

5.由于存储过程有多个输出参数,所以获得结果集时,可能有多个结果集ReSet,所以,所以cs.getObject(Int resultSetIdx)

 

   //1.pakage 包里面装的是一个游标---------------------------------------------------------------------------------

CREATE OR REPLACE PACKAGE MYPACKAGE  

   AS    TYPE MY_CURSOR IS REF CURSOR;           --装结果集用的游标

 end MYPACKAGE;

   //2.存储过程------------------------------------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE PRO_3(p_CURSOR out MYPACKAGE.MY_CURSOR) IS 

                    --因为期望存储过程返回一个结果集,然后把结果集转换成LIst,所以  用游标 当返回值,作为输出参数。
BEGIN
  OPEN p_CURSOR FOR
    SELECT * FROM aaa_test;
END PRO_3;

   //3. java调用存储过程的方法------------------------------------------------------------------------------------------------------

private void TestInPutOutPut2() {

        //创建用户信息
     Session session=getSessionFactory().openSession();
      Connection conn = session.connection();
               String sql = "{call getNameById(?,?)}";
               CallableStatement cs;       //1.定义:一个专门用来调用sql语句的statement 变量
               ResultSet rs;
               try {

     cs = conn.prepareCall("{ call inv.PRO_3(?) }"); 
        cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);  //2.因为要返回的类型是
        cs.execute(); 
        if (cs.getObject(1)!=null) {
         rs = (ResultSet) cs.getObject(1);  //因为一个存储过程可能有多个输出参数,所以
         System.out.println(
            "发票类型(0:冠名 ,1统印)" + "\t"
           + "往年还是今年(往年:-1 今年0)" + "\t"
           + "季度 1234" + "\t"
           + "月份" + "\t"
           + "数量" + "\t"
           + "主键" + "\t"
           + "备注" + "\t"
          );  
         while (rs.next()) {
 
          System.out.println("\t" + rs.getString(1) + "\t"
               + rs.getString(2) + "\t"
               + rs.getString(3) + "\t"
               + rs.getString(4) + "\t"
               + rs.getString(5) + "\t"
               + rs.getString(6) + "\t"
               + rs.getString(7) + "\t"
              );    

         }                  
     }


    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } 

}


   

 

posted on 2014-01-05 13:09  fantiejun0436  阅读(200)  评论(0)    收藏  举报

导航