2024年4月11日发(作者:)

JSP 调用存储过程

在需要执行存储过程时,可以使用T-SQL语句CALL。如果存储过程是批处理

中的第一条语句,那么不使用CALL关键字也可以执行该存储过程,CALL语法格

式如下:

[ { CALL } ]

{ procedure_name [;number] | procedure_name_var }

parameter = [ { value | @variable [ OUTPUT ] | [ DEFAULT ] } ]

[,…n]

[ WITH RECOMPILE ]

其中主要参数的含义如下:

Procedure_name 要调用的存储过程名称。

;number 是可选的整数,用于将相同名称的过程进行组合,使得它们可以用一句DRO

P PROCEDURE 语句删除。在【testdb】中使用的过程可以Reader_proc;1、proc_GetCo

untsBook等来命名。DROP PROCEDURE book_proc语句将除去整个组。在对过程分组

后,不能删除组中的单个过程。例如,DROP PROCEDURE proc_GetCountsBook;这是不

允许的。

procedure_name_var 是局部定义变量名,代表存储过程名称。

parameter 是过程参数,在CREATE PROCEDURE语句中定义。

Value 是过程中参数的值。如果参数名称没有指定,参数值必须以CREATE PROCEDUR

E语句中定义的顺序给出。

如果参数值是一个对象名称、字符串或通过数据库名称或所有者名称进行限制,则

整个名称必须用单引号括起来。如果参数值是一个关键字,则该关键字必须用双引

号括起来。

OUTPUT 指定存储过程必须返回一个参数。该存储过程的匹配参数也必须由关键字O

UTPUT创建。使用游标变量作参数时使用该关键字。

DEFAULT 根据过程的定义,提供参数的默认值。当过程需要的参数值是没有事先定义

好的默认值,或缺少参数,或指定了DEFAULT关键字,就会出错。

例如,在MySQL中的示例数据库【testdb】中调用一个带字符类型参数的

book_proc存储过程,它将显示从表中返回查询指定图书的编号、图书名称、库存

量、价格等信息,代码如下:

call book_proc('计算机基础');

在MySQL中执行该存储过程如图10-15所示。

图10-15 调用程序

下面是一个在JSP调用存储过程的实例,代码如下所示。

文件名:

<%@ page language="java" import=".*" pageEncoding="UTF-8"%>

<%@ page import=".*"%>

调用存储

<%

try {

// 加载驱动

e("").newInstance();

String url = "jdbc:mysql://localhost:3306/testdb";

String user = "root";

String password = "123";

Connection conn = nection(url, user,password);

CallableStatement st = eCall("{call book_proc('计算机基础')}");

//执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。

ResultSet rs = eQuery();

n("

图书信息


图书编号

while (()) {

}

("


");

();

("" + ing(1) + ""

+ ing(2) + "" + ing(3)

+ "" + ing(4) + "");

//创建用于将调用存储过程的 SQL 语句发送到数据库的 SQLServerStatement 对象。

图书名称图书数量图书价格");

} catch (Exception e) {

%>

}

("无数据");

tackTrace();

在上述代码中,主要通过conn数据库连接的prepareCall()方法,实现存储过程

的调用。执行上述代码,结果如图10-16所示。

图10-16 JSP中调用存储过程