java 存储过程_java 与 存储过程

存储过程

通过运用Create Procedure 命令能够创建存储过程,在创建存储过程之前,应该考虑到以下几个方面:

在一个批处理中,Create Procedure 语句不能与其它SQL 语句合并在一起;

数据库所有者具有默认的创建存储过程的权限,它可把该权限传递给其它的用户;

存储过程作为数据库对象其命名必须符合命名规则;

只能在当前数据库中创建属于当前数据库的存储过程。

用Create Procedure 创建存储过程的语法规则如下:

CREATE PROC [ EDURE ] procedure_name [ ; number ]

[ { @parameter data_type }

[ VARYING ] [ = default ] [ OUTPUT ]

] [ ,...n ]

[ WITH

{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ ...n ]

各参数的含义如下:

procedure_name是要创建的存储过程的名字,它后面跟一个可选项number, 它是一个整数,用来区别一组同名的存储过程。存储过程的命名必须符合命名规则,在一个数据库中或对其所有者而言,存储过程的名字必须惟一。

@parameter

是存储过程的参数。在Create Procedure语句中,可以声明一个或多个参数。当调用该存储过程时,用户必须给出所有的参数值,除非定义了参数的缺省值。若参数的形式以@parameter=value出现,则参数的次序可以不同,否则用户给出的参数值必须与参数列表中参数的顺序保持一致。若某一参数以@parameter=value形式给出,那么其它参数也必须以该形式给出。一个存储过程至多有1024个参数。

Data_type

是参数的数据类型。在存储过程中,所有的数据类型包括text 和image 都可被用作参数。但是,游标cursor 数据类型只能被用作OUTPUT 参数。当定义游标数据类型时,也必须对VARING和OUTPUT关键字进行定义。对可能是游标型数据类型的OUTPUT参数而言,参数的最大数目没有限制。

VARYING指定由OUTPUT参数支持的结果集,仅应用于游标型参数。

Default是指参数的缺省值。如果定义了缺省值,那么即使不给出参数值,则该存储过程仍能被调用。缺省值必须是常数,或者是空值。

OUTPUT表明该参数是一个返回参数。用OUTPUT参数可以向调用者返回信息。Text类型参数不能用作OUTPUT参数。

RECOMPILE指明SQL Server并不保存该存储过程的执行计划,该存储过程每执行一次都又要重新编译。

ENCRYPTION

表明SQL Server 加密了syscomments 表,该表的text 字段是包含有Create procedure语句的存储过程文本,使用该关键字无法通过查看syscomments 表来查看存储过程内容。

FOR REPLICATION选项指明了为复制创建的存储过程不能在订购服务器上执行,只有在创建过滤存储过程时(仅当进行数据复制时过滤存储过程才被执行),才使用该选项。FOR REPLICATION与WITH RECOMPILE选项是互不兼容的。

AS指明该存储过程将要执行的动作。

Sql_statement是任何数量和类型的包含在存储过程中的SQL语句。

另外应该指出,一个存储过程的最大尺寸为128M, 用户定义的存储过程必须创建在当前数据库中。例子:

存储过程 query_book

create proc query_book

as

select * from book

GO

java 代码

package com.mysoft;

import java.sql.*;

/**

* Created by IntelliJ IDEA.

* User: orient1

* Date: 2005/05/12

* Time: 10:51:00

* To change this template use File | Settings | File Templates.

*/

public class ProceTest {

private Connection conn = null;

public ProceTest() {

}

void init() throws ClassNotFoundException {

String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=master";

String user = "sa";

String passWord = "sa";

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

try {

conn = DriverManager.getConnection(url, user, passWord);

} catch (SQLException e) {

e.printStackTrace();

}

}

void execute() {

CallableStatement call = null;

try {

call = conn.prepareCall("query_book");

call.execute();

ResultSet rst = call.getResultSet();

while(rst.next()){

System.out.println("/nID: "+rst.getString("ID"));

System.out.println("bookname:  "+rst.getString("bookName"));

System.out.println("bookprice: "+rst.getString("bookPrice"));

System.out.print("--------------------------");

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

public static void main(String[] arg) {        try {            ProceTest pro = new ProceTest();            pro.init();            pro.execute();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }    }}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值