一、CallableStatement接口简介
CallableStatement主要是调用数据库中的存储过程,CallableStatement是preparedStatement接口的子接口。
CallableStatement可以接收存储过程的返回值。
二、使用CallableStatement接口调用存储过程
void registerOutParemeter(int parameterIndex, int sqlType)
按顺序位置parameterIndex将OUT参数注册为JDBC 类型sqlType。
1、存储函数的创建
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(10,@bookName);
SELECT @bookName;
@bookName相当于全局变量
2、java语言实现CallableStatement
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;
import util.DbUtil;
public class demo4 {
private static String getBookNameById(int id) throws Exception{
DbUtil dbUtil = new DbUtil();//创建DbUtil对象
Connection con = dbUtil.getcon();//获取数据库连接
String sql = "{CALL pro_getBookNameById(?,?)}";//sql语句,使用存储函数
CallableStatement csta = con.prepareCall(sql);//创建CallableStatement接口,预处理sql语句
csta.setInt(1, id);//设置第一个?的值
csta.registerOutParameter(2, Types.VARCHAR);//设置返回值类型
csta.execute();//执行sql语句
String bookName = csta.getString("bN");//获取返回值
dbUtil.close(csta, con);//关闭连接
return bookName;//返回查询到的书名
}
public static void main(String[] args) throws Exception {
//String bookName = getBookNameById(1);
System.out.println("图书名称:"+getBookNameById(1));
}
}
三、可能出现的小虫子
java.sql.SQLException: Parameter number X is not an OUT parameter
1、java实现时,存储过程函数名调用错误。
2、详情见该网址
点击打开链接