2006/12/11 | 用SQL语句创建存储过程
类别(数据库) | 评论(1) | 阅读(740) | 发表于 09:29

本节例示一个不带参数的简单存储过程。多数存储过程的功能比本例复杂多了,但这里主要说明存储过程的一些基本要点。如前面所述,不同DBMS定义存储过程的语法是不同的。例如,有些DBMS使用begin . . . end或其他关键字指明存储过程定义的开始和结束。在有些DBMS中,下面的SQL语句可创建一个存储过程:

create procedure SHOW_SUPPLIERS
as
select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME
from SUPPLIERS, COFFEES
where SUPPLIERS.SUP_ID = COFFEES.SUP_ID
order by SUP_NAME

下面的代码将SQL语句放到一个字符串中,然后赋给变量createProcedure以备后用:

String createProcedure = "create procedure SHOW_SUPPLIERS " +
    "as " +
    "select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " +
    "from SUPPLIERS, COFFEES " +
    "where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +
    "order by SUP_NAME";

下面的代码段使用Connection对象con来创建Statement对象,用于把创建存储过程的SQL语句发送给数据库:

Statement stmt = con.createStatement();
stmt.executeUpdate(createProcedure);

存储过程SHOW_SUPPLIERS将作为一个可调用的数据库对象在数据库中编译并存储,调用时就像调用其他方法一样。

从JDBC调用存储过程

JDBC允许在用Java编写的程序中调用存储过程。第一步是创建一个CallableStatement对象。就像Statement和PreparedStatement对象一样,利

用一个打开的Connection对象即可完成创建。CallableStatement对象包含了存储过程的一个调用;但它不包含存储过程本身。下面的第一行代码使用连接con创建了存储过程SHOW_SUPPLIERS的一个调用。花括号内的那部分就是存储过程的转义语法。当驱动程序碰到“{call SHOW_SUPPLIERS}”时,它将把这个转义语法转换成数据库使用的本地SQL,以调用名为SHOW_SUPPLIERS的存储过程。


CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery();

执行后结果集rs的内容如下:

SUP_NAME   COF_NAME
----------------  -----------------------
Acme, Inc.   Colombian
Acme, Inc.   Colombian_Decaf
Superior Coffee   French_Roast
Superior Coffee   French_Roast_Decaf
The High Ground   Espresso

注意,用于执行cs的方法是executeQuery,因为cs调用的存储过程包含一个查询,执行后产生一个结果集。如果存储过程包含一条更新或一条DLL语句,那就要使用executeUpdate方法。但有时一个存储过程包含多条SQL语句,因而它产生的不只是一个结果集、不只是一个更新计数或产生一些结果集和更新计数的组合。这样就有多个结果集,这时就应该使用execute方法来执行CallableStatement。

CallableStatement类是PreparedStatement的子类,因此CallableStatement对象可与PreparedStatement对象一样带有输入参数。此外,CallableStatement对象还可带输出参数或输入/输出参数。INOUT参数和execute方法很少使用。要获取更详细信息,请参考“使用Java进行JDBC数据库访问”。

0

评论Comments