一、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、详情见该网址
点击打开链接