JSP 调用存储过程
在需要执行存储过程时,可以使用T-SQL语句CALL。如果存储过程是批处理中的第一条语句,那么不使用CALL关键字也可以执行该存储过程,CALL语法格式如下:
[ { CALL } ]
{ procedure_name [;number] | procedure_name_var }
parameter = [ { value | @variable [ OUTPUT ] | [ DEFAULT ] } ]
[,…n]
[ WITH RECOMPILE ]
其中主要参数的含义如下:
● Procedure_name 要调用的存储过程名称。
sql存储过程实例● ;number 是可选的整数,用于将相同名称的过程进行组合,使得它们可以用一句DROP PROCEDURE 语句删除。在【testdb】中使用的过程可以Reader_proc;1、proc_GetCountsBook等来命名。DROP PROCEDURE book_proc语句将除去整个组。在对过程分组后,不能删除组中的单个过程。例如,DROP PROCEDURE proc_GetCountsBook;这是不允许的。
● procedure_name_var 是局部定义变量名,代表存储过程名称。
● parameter 是过程参数,在CREATE PROCEDURE语句中定义。
● Value 是过程中参数的值。如果参数名称没有指定,参数值必须以CREATE PROCEDURE语句中定义的顺序给出。
如果参数值是一个对象名称、字符串或通过数据库名称或所有者名称进行限制,则整个名称必须用单引号括起来。如果参数值是一个关键字,则该关键字必须用双引号括起来。 | |
● OUTPUT 指定存储过程必须返回一个参数。该存储过程的匹配参数也必须由关键字OUTPUT创建。使用游标变量作参数时使用该关键字。
● DEFAULT 根据过程的定义,提供参数的默认值。当过程需要的参数值是没有事先定义好的默认值,或缺少参数,或指定了DEFAULT关键字,就会出错。
例如,在MySQL中的示例数据库【testdb】中调用一个带字符类型参数的book_proc存储过程,它将显示从表中返回查询指定图书的编号、图书名称、库存量、价格等信息,代码如下:
call book_proc('计算机基础');
在MySQL中执行该存储过程如图10-15所示。
图10-15 调用程序
下面是一个在JSP调用存储过程的实例,代码如下所示。
文件名:CallProc.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>调用存储</title></head>
<body>
<%
try {
// 加载驱动
Class.forName("sql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost:3306/testdb";
String user = "root";
String password = "123";
Connection conn = Connection(url, user,password);
//创建用于将调用存储过程的 SQL 语句发送到数据库的 SQLServerStatement 对象。
CallableStatement st = conn.prepareCall("{call book_proc('计算机基础')}");
//执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
ResultSet rs = st.executeQuery();
out.println("<h1>图书信息</h1><hr><table width='400'><tr><td>图书编号</td><td>图书名称</td><td>图书数量</td><td>图书价格</td></tr>");
while (rs.next()) {
out.print("<tr><td>" + rs.getString(1) + "</td><td>"
+ rs.getString(2) + "</td><td>" + rs.getString(3)
+ "</td><td>" + rs.getString(4) + "</td></tr>");
}
out.print("</table><hr>");
conn.close();
} catch (Exception e) {
out.print("无数据");
e.printStackTrace();
}
%>
</body></html>
在上述代码中,主要通过conn数据库连接的prepareCall()方法,实现存储过程的调用。执行上述代码,结果如图10-16所示。
图10-16 JSP中调用存储过程
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论