Jdbc系列十一:CallableStatement接口

CallableStatement继承自PreparedStatement,可调用数据库存储过程并接收返回值,为DBMS提供标准调用形式。内容还介绍了在MySQL中创建存储过程(5.0以前版本不支持)、在数据库中调用存储过程以及使用CallableStatement调用存储过程的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  CallableStatement的所有超级接口为PreparedStatement、Statement、Wrapper。其中继承自PreparedStatement接口。CallableStatement主要是调用数据库中的存储过程。在使用CallableStatement时可以接收存储过程的返回值。CallableStatement对象为所有的DBMS提供了一种标准的形式去调用数据库中已存在的存储过程。
1、在MySQL中创建存储过程。注意:MySQL 5.0以前版本不支持存储过程

#1.空参
DELIMITER $$
CREATE PROCEDURE p1( )
BEGIN 
  INSERT INTO user(NAME)VALUES('x1');
  INSERT INTO user(NAME)VALUES('x2');
  SELECT * FROM user;
END $$
DELIMITER ;
 
#2.带参
DELIMITER $$
CREATE PROCEDURE p2( IN nm VARCHAR(10) )
BEGIN
  INSERT INTO user(NAME) VALUES(nm);
  SELECT * FROM user;
END $$
DELIMITER ;
 
#3.带参,带返回值
DELIMITER $$
CREATE PROCEDURE p3(IN nm VARCHAR(10),OUT con INT )
BEGIN 
  INSERT INTO user(NAME) VALUES(nm);
  SELECT COUNT(1) INTO con FROM user;
  SELECT * FROM user;
END $$
DELIMITER ;

2、在数据库中调用存储过程

#1.空参
CALL p1();
#2.带参
CALL p2('带参');
#3.带参,带返回值
CALL p3('有返回值',@con);
SELECT @con;

3、使用CallableStatement调用存储过程

package com.atguigu.jdbc;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Types;
import org.junit.Test;

public class CallableStatementDemo {

    //空参调用
    @Test
    public void test1() throws Exception {
        Connection conn = JDBCTools.getConnection();
        CallableStatement cs = conn.prepareCall("call p1()");  //call p1  也可以不带括号
        cs.execute();
        conn.close();
    }

    //有参调用
    @Test
    public void test2()  throws Exception {
        Connection conn = JDBCTools.getConnection();
        CallableStatement cs = conn.prepareCall("call p2('BarryLee')");
        cs.execute();
        conn.close();
    }

    //有参并有返回值调用
    @Test
    public void test3() throws Exception {
        Connection conn = JDBCTools.getConnection();
        CallableStatement cs = conn.prepareCall("call p3(?,?)");
        cs.setString(1, "BarryLee");
        cs.registerOutParameter(2, Types.INTEGER);  //注册一个输出参数
        cs.execute();//执行
        ResultSet set = cs.getResultSet();  //获取输出结果
        while(set.next()) {
            System.out.print(set.getString("name")+" ");
        }
        //获取输出参数的结果
        int i = cs.getInt(2);  //之前注册的第几个就是多少
        System.out.println("i:"+i);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值