java 调用存储过程

mybatise 调存储过程

存储过程

create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 out varchar2)
   as
    begin
          p3:=p1+p2;
      end;


<!-- mapper.xml -->
    <select id="callProcedure" parameterType="map" statementType="CALLABLE" >
      {
         call prg_add(
               #{p1,mode=IN,jdbcType=NUMERIC},   <!--参数一-->
               #{p2,mode=IN,jdbcType=NUMERIC},   <!--参数二-->

               #{p3,mode=OUT,jdbcType=NUMERIC}   <!--输出参数-->

         )
      }
  </select>


service: 
//调用存储过程
    public static void main(String[] args) throws IOException {
        SqlSession session=getSession();
        CallMapper cm=session.getMapper(CallMapper.class);
        Map map=new HashMap();
        map.put("p1", 100);
        map.put("p2", 200);
      map.put("p3", null);
cm.callProcedure(map); System. out.println(map. get( " p3 " )); }




jdbc 调用存储过程

  1. public void testProcedure(){
  2. String sql = "{call selectUserById(?,?,?,?)}";
  3. Connection conn = null;
  4. CallableStatement call = null;
  5. try {
  6. //得到一个数据库连接
  7. conn = JDBCUtils.getConnection();
  8. //通过连接创建出statement
  9. call = conn.prepareCall(sql);
  10. //对于in参数,赋值
  11. call.setInt( 1, 2); // (第几个问号,要赋的值)
  12. //对out参数,声明
  13. call.registerOutParameter( 2, OracleTypes.VARCHAR); //(第几个问号,声明的类型)
  14. call.registerOutParameter( 3, OracleTypes.NUMBER);
  15. call.registerOutParameter( 4, OracleTypes.CHAR);
  16. //执行调用
  17. call.execute();
  18. //取出结果
  19. String userName = call.getString( 2);
  20. int userAge = call.getInt( 3);
  21. String userSex = call.getString( 4);
  22. System.out.println( "用户姓名:"+userName+ "\n\t年龄:"+userAge+ "\n\t性别:"+userSex);
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. } finally{
  26. //关闭连接,释放资源
  27.   JDBCUtils.release(conn, call, null);
  28. }
  29. }



返回结果集

    1. import java.sql.CallableStatement;
    2. import java.sql.Connection;
    3. import java.sql.ResultSet;
    4. import org.junit.Test;
    5. import oracle.jdbc.internal.OracleCallableStatement;
    6. import oracle.jdbc.internal.OracleTypes;
    。。。class。。。。。。
  1. public void testCursor(){
  2. String sql = "{call Mypackage.queryUserList(?,?) }";
  3. Connection conn = null;
  4. CallableStatement call = null;
  5. ResultSet rs = null;
  6. try {
  7. //得到数据库连接
  8. conn = JDBCUtils.getConnection();
  9. //通过数据库连接创建statement
  10. call = conn.prepareCall(sql);
  11. //对于输入参数,赋值
  12. call.setInt( 1, 1);
  13. //对于输出参数,声明
  14. call.registerOutParameter( 2, OracleTypes.CURSOR);
  15. //执行调用
  16. call.execute();
  17. //将CallableStatement 强转成 OracleCallableStatement 用来获取光标类型Cursor,并得到结果ResultSet
  18. rs = ((OracleCallableStatement)call).getCursor( 2);
  19. //遍历 ResultSet
  20. while (rs.next()) {
  21. //根据类型和列名取值
  22. int id = rs.getInt( "user_id"); //括号内为 列名
  23. String user_name = rs.getString( "user_name");
  24. int age = rs.getInt( "user_age");
  25. String sex = rs.getString( "user_sex");
  26. System.out.println( "查询到的用户信息:\n\tid:"+id+ "\n\t姓名:"+user_name
  27. + "\n\t年龄:"+age+ "\n\t性别:"+sex);
  28. }
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. } finally{
  32. JDBCUtils.release(conn, call, rs);
  33. }
  34. }


  1. CallableStatement c=conn.prepareCall("{call delePro(?)}");   //删除的存储过程
  2.  
  3. c.setInt(1,1);  
  4.  
  5. c.execute();  
  6.  
  7. c=conn.prepareCall("{call selePro}");   //查询的存储过程
  8. ResultSet rs=c.executeQuery();  
  9.  
  10. while(rs.next())  
  11. {  
  12. String Stu=rs.getString("StuID");  
  13. String name=rs.getString("StuName");  
  14. String add=rs.getString("StuAddress");  
  15.  
  16. System.out.println ("学号:"+" "+"姓名:"+" "+"地址");  
  17. System.out.println (Stu+" "+name+" "+add);  
  18. }  
  19. c.close();  
  20. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值