要调用存储过程,我们可以通过 EntityManager 对象的 createNativeQuery()方法执行 SQL 语句 
(注意:这里说的是SQL 语句,不是 EJB3 QL), 
调用存储过程的 SQL 格式如下: 
{call  存储过程名称(参数 1,  参数 2, …)} 
在 EJB3 中你可以调用的存储过程有两种 
1.无返回值的存储过程。 
2.返回值为 ResultSet(以 select 形式返回的值)的存储过程,EJB3 不能调用以 OUT 参数返回值的存储过程。 
下面我们看看几种具有代表性的存储过程的调用方法.

1  调用无返回值的存储过程

我们首先创建一个名为 AddPerson 的存储过程,他的 DDL 如下(注:本例使用的是Sql2000 数据库): 
CREATE PROCEDURE `AddPerson`() NOT DETERMINISTIC 
SQL SECURITY DEFINER COMMENT '' 
BEGIN 
INSERT into person values( null,'存储过程',1,25,'1980'); 
END;

下面的代码片断展示了无返回值存储过程的调用方法:

@PersistenceContext 
protected EntityManager em; 
… 
private String QueryNoneReturnValueStoreProcedure(){

//调用无返回参数的存储过程 
Query query = em.createNativeQuery("{call AddPerson()}"); 
query.executeUpdate(); 
StringBuffer out = new StringBuffer("*************** QueryNoneReturnValueStoreProcedure  结果打印  ****************<BR>"); 
return out.toString(); 
}

2  调用返回单值的存储过程 
我们首先创建一个名为 GetPersonName 的存储过程,他有一个  INTEGER 类型的输入参数,存储过程的 DDL 如 下(注:本例使用的是Sql2000数据库): 
CREATE PROCEDURE `GetPersonName`(IN Pid INTEGER(11)) NOT DETERMINISTIC 
SQL SECURITY DEFINER COMMENT '' 
BEGIN 
select personname from person where `personid`=Pid; 
END; 
上面的 select 语句不一定要从表中取数据,你也可以这样写:select ‘foshanren’ 
下面的代码片断展示了返回单值的存储过程的调用方法: 
@PersistenceContext protected EntityManager em; 
… 
private String QuerySingleObjectStoreProcedure(){ 
//调用返回单个值的存储过程 
Query query = em.createNativeQuery("{call GetPersonName(?)}"); 
query.setParameter(1, new Integer(1)); 
String result = query.getSingleResult().toString(); 
StringBuffer out = new StringBuffer("*************** QuerySingleObjectStoreProcedure  结果打 
印  ****************<BR>"); out.append("返回值(人员姓名)为:"+ result+ "<BR>"); return out.toString(); 

3  调用返回表全部列的存储过程 
我们首先创建一个名为 GetPersonList 的存储过程,他的 DDL 如下(注:本例使用的是Sql2000数据库): 
CREATE PROCEDURE `GetPersonList`() NOT DETERMINISTIC 
SQL SECURITY DEFINER COMMENT '' 
BEGIN 
select * from person; 
END;

下面的代码片断展示了返回表全部列的存储过程的调用方法,我们可以让 EJB3  Persistence 运行环境将列值直接

填充入一个 Entity 的实例(本例填充进 Person 对象),并将实例作为结果返回. 
@PersistenceContext protected EntityManager em; 
… 
private String QueryStoreProcedure(){ 
//调用返回 Person 全部列的存储过程 
Query query = em.createNativeQuery("{call GetPersonList()}", Person.class); List result = query.getResultList(); 
StringBuffer out = new StringBuffer("*************** QueryStoreProcedure  结果打印 
****************"); 
if (result!=null){ 
Iterator iterator = result.iterator(); 
while( iterator.hasNext() ){ 
Person person= (Person)iterator.next(); 
out.append(person.getName()+ "<BR>"); 


return out.toString(); 
}

4  调用返回部分列的存储过程 
我们首先创建一个名为 GetPersonPartProperties 的存储过程,他的 DDL 如下(注:本例使用的是Sql2000数据库): 
CREATE PROCEDURE `GetPersonPartProperties`() NOT DETERMINISTIC 
SQL SECURITY DEFINER 
COMMENT '' BEGIN 
SELECT personid, personname from person; 
END;

上面的 select 语句不一定要从表中取数据,你也可以这样写:select 3000, ‘foshanren’ 
下面的代码片断展示了返回部分列的存储过程的调用方法. 
@PersistenceContext protected EntityManager em; 
… 
private String QueryPartColumnStoreProcedure(){ 
//调用返回部分列的存储过程 
Query query = em.createNativeQuery("{call GetPersonPartProperties()}"); List result = query.getResultList(); 
StringBuffer out = new StringBuffer("*************** QueryPartColumnStoreProcedure  结果打印 
****************"); 
if (result!=null){ 
Iterator iterator = result.iterator(); 
while( iterator.hasNext() ){ 
//取每一行 
Object[] row = ( Object[]) iterator.next(); 
//数组中的第一个值是 personid 
int personid = Integer.parseInt(row[0].toString()); String PersonName = row[1].toString(); 
out.append("人员 ID="+ personid+ ";  姓名="+PersonName+ "<BR>"); 


return out.toString(); 

SQL2000的存储过程调用

create table person( 
personid  int primary key , 
personname varchar(10) not null, 
age varchar(10) not null, 
sex varchar(10) not null 

select * from person 
create procedure addperson 
       as 
begin 
INSERT into person values( 1,'存储过程',1,25); 
end

create procedure getperson 
@pid int 
       as 
begin 
select personname from person where personid=@pid; 
end

create procedure getonepart

as 
begin 
select personid ,personname from person ; 
end

create procedure getAllperson

as 
begin 
select * from person ; 
end

EJB3 调用的存储过程的更多相关文章

  1. PHP调用MYSQL存储过程实例

    PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一:无参的存储过程$conn = ...

  2. LoadRunner调用Oracle存储过程

    为了测试这个存储过程,我遥了一圈去做这个事情,这里说一下我自己接受到任务和自己开始是怎么想的. 方法一: 一开始我想着可以使用C#直接去调用存储过程,然后用Loadrunner调用C#的dll去测试, ...

  3. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  4. SQL 语句调用这个存储过程,生成顺序编码

    一直很讨厌存储过程,没想到今天帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧,不多说了,切入正题 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这 ...

  5. java代码调用oracle存储过程

    一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...

  6. 调用MYSQL存储过程实例

    PHP调用MYSQL存储过程实例 http://blog.csdn.net/ewing333/article/details/5906887 http://www.cnblogs.com/kkchen ...

  7. (转载)delphi 中如何调用sql 存储过程

    delphi 中如何调用sql 存储过程 使用TADOStoredProc组件,可以,给你举个例子好了 with ADOStoredProc1 do begin Close; Parameters.C ...

  8. Jfinal调用Orcale存储过程

    因为项目需要,最近一直在学习Orcale存储过程,但发现在网上很少有人写Jave中Jfinal调用Orcale存储过程的文章,即使有也是几年前的,很多都不能用,今天给大家分享一段Jfinal调用Orc ...

  9. Dynamics CRM - 使用 C# Plugin 调用 SQL 存储过程

    有时候,在 Dynamics CRM Plugin 中通过 linq 查询数据会比较慢,可以通过采用在 C# plugin 中直接调用数据库存储过程的方式来提高效率,具体过程如下: 1.新建一个存储过 ...

随机推荐

  1. docker~环境变量到底怎么用

    docker已经用了两年多了,从开始的简单应用到现在的自动化部署,已经越来越感觉到它的威力,今天把Hitchhiker部署完成后,看到了它与.net core项目有个类似的地方,就是对于多环境部署的时 ...

  2. Servlet3.0的文件上传功能

    在Servlet3.0之前,文件上传需要借助于第三方插件,在Servlet3.0之后,Servlet本身开始支持文件上传功能. 获取上传的文件可以通过HTTPServletRequest的getPar ...

  3. css-知识总结

    是什么 CSS通常称为CSS样式或层叠样式表,主要用于设置HTML页面中的文本内容(字体,大小,对其方式等),图片的外形 (高宽.边框样式.边距等)以及版面的布局等外观显示样式. CSS可以是HTML ...

  4. springboot 整合kafka

    本文介绍如何在springboot项目中集成kafka收发message. 1.先解决依赖 springboot相关的依赖我们就不提了,和kafka相关的只依赖一个spring-kafka集成包 &l ...

  5. PAT 1021 Deepest Root

    #include <cstdio> #include <cstdlib> #include <vector> using namespace std; class ...

  6. PAT 1055 The World's Richest

    #include <cstdio> #include <cstdlib> #include <cstring> #include <vector> #i ...

  7. HttpComponents

    一 概述 1.HttpComponents的作用 HttpComponents的作用是模拟浏览器获取网页内容. 二 使用 1.使用HttpComponents需要先导入架包. 2.使用 Closeab ...

  8. jQuery 添加样式属性的优先级别

    jQuery类中添加多个属性 $('#five .a') .css({ color:'blue', border:'2px solid green', background:'blue' }); jQ ...

  9. 【网络编程】Socket套接字网络编程模型

    一.Linux网络模型 -- Socket套接字编程 图片:Socket 抽象层 Socket编程--不同协议,统一接口 Socket的实质就是一个接口, 利用该接口,用户在使用不同的网络协议时,操作 ...

  10. 【HTML5】HTML5 综合

    HTML5教程: 视频教程:http://www.socss.cn/html5视频教程大集合/ DCloud关于HTML5:http://ask.dcloud.net.cn/docs 开发工具:HBu ...