存储过程是一组SQL语句,它们构成一个逻辑单元并执行特定的任务,它们用于封装一组操作或查询,以便在数据库服务器上执行
。例如,对雇员数据库(hire、fire、promote、lookup)的操作可以编码为由应用程序代码执行的存储过程。存储过程可以用不同的参数和结果进行编译和执行
,它们可以是输入、输出和输入/输出参数的任意组合
。
具体的详情参考:https://docs.oracle.com/javase/tutorial/jdbc/basics/storedprocedures.html
我这里只讲解存储过程的调用,如果了解更多参考上面的链接
1.存储过程的调用功能
使用CallableStatement对象调用存储过程,调用存储过程的格式为:
{call 存储过程名称(?,?)} ,其中?为参数占位符,参数可能为输入参数,输出参数,也可是输入\输处参数的组合中的任意一种
System.out.println("\nCalling the procedure SHOW_SUPPLIERS");
//存储过程的名称为:SHOW_SUPPLIERS
CallableStatement cs = this.con.prepareCall("{call SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery();
while (rs.next()) {
//SHOW_SUPPLIERS的存储过程有返回结果集
String supplier = rs.getString("SUP_NAME");
String coffee = rs.getString("COF_NAME");
System.out.println(supplier + ": " + coffee);
}
System.out.println("\nContents of COFFEES table before calling RAISE_PRICE:");
System.out.println("\nCalling the procedure RAISE_PRICE");
//RAISE_PRICE这个存储过程有三个参数,第一个和第二个为输入参数,第三个为输入/输出参数组合
cs = this.con.prepareCall("{call RAISE_PRICE(?,?,?)}");
cs.setString(1, coffeeNameArg);
cs.setFloat(2, maximumPercentageArg);
//设置输出参数的类型为数值类型
cs.registerOutParameter(3, Types.NUMERIC);
cs.setFloat(3, newPriceArg);
//执行存储过程
cs.execute();
//直接从CallableStatement 获取输出参数的值
System.out.println("\nValue of newPrice after calling RAISE_PRICE: " + cs.getFloat(3));
System.out.println("\nContents of COFFEES table after calling RAISE_PRICE:");
网友评论