欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用CallableStatement接口调用存储过程

程序员文章站 2022-05-29 22:50:04
...
1. CallableStatement接口的引入

CallableStatement主要是调用数据库中的存储过程,CallableStatement也是Statement接口的子接口。在使用CallableStatement时可以接收存储过程的返回值。


2. 使用CallableStatement接口调用存储过程

void registerOutParameter(int parameterIndex,int sqlType)
按顺序位置parameterIndex将OUT参数注册为JDBC类型sqlType。


DELIMITER &&
CREATE PROCEDURE pro_getBookNameById(IN bookId INT,OUT bN VARCHAR(20))
 BEGIN
    SELECT bookName INTO bn FROM t_book WHERE id=bookId;
 END 
&&
DELIMITER;

CALL pro_getBookNameById(1,@bookName);
SELECT @bookName;


TestCallableStatement.java

package com.andrew.jdbc.chap07;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;

import com.andrew.jdbc.util.DbUtil;

public class TestCallableStatement {
    private static DbUtil dbUtil = new DbUtil();
    // 调用存储过程,通过id查询bookName
    private static String getBookNameById(int id) throws Exception {
        Connection con = dbUtil.getConnection();
        String sql = "{CALL pro_getBookNameById(?,?)}";
        CallableStatement callableStatement = con.prepareCall(sql);
        callableStatement.setInt(1, id); // 设置第一个参数
        callableStatement.registerOutParameter(2, Types.VARCHAR); // 设置返回类型
        callableStatement.execute();
        String bookName = callableStatement.getString("bn"); // 获取返回值
        dbUtil.close(callableStatement, con);
        return bookName;
    }
    public static void main(String[] args) throws Exception {
        System.out.println("图书名称是:" + getBookNameById(1));
    }
}

运行结果:
图书名称是:java学习
相关标签: jdbc