`

EJB3.0调用存储过程

    博客分类:
  • EJB3
ejb 
阅读更多
要调用存储过程,我们可以通过 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.0入门图文教程

    首先,我们来看《EJB3.0开发Entity.pdf》。在EJB 3.0中,Entity Bean代表持久化对象,它存储在数据库中并与数据库进行交互。这个部分将介绍如何定义实体bean,包括使用JPA(Java Persistence API)来注解实体类,...

    EJB3.0实例教程如何调用存储过程.doc

    【EJB3.0 实例教程:如何调用存储过程】 EJB3.0(Enterprise JavaBeans 3.0)是Java EE平台中用于构建分布式企业级应用的组件模型,它简化了Java企业级开发,引入了注解驱动的编程模型。在EJB3.0中,开发人员可以...

    ejb3.0规范PDF

    综上所述,ejb3.0规范PDF包含了大量的信息,从配置简化到实体Bean的JPA集成,再到会话Bean、消息驱动Bean的使用,以及依赖注入、接口驱动编程、事务管理和安全性等多个方面,为Java EE开发者提供了全面的指导。...

    EJB3.0实例教程(源代码).rar )

    综上所述,"EJB3.0实例教程(源代码).rar"是一个宝贵的资源,它不仅提供了EJB 3.0的理论知识,还通过实际代码示例加深了理解和应用。学习这个教程,你将能够掌握EJB 3.0的核心概念,并有能力创建和部署自己的EJB组件...

    EJB3.0__EJB3.0

    EJB3.0是EJB规范的一个重要版本,它引入了许多简化开发的特性,使得EJB更加易用。 EJB3.0的核心概念包括: 1. **Session Bean**: - **有状态Session Bean(Stateful Session Bean)**:每个客户端会话对应一个...

    ejb 3.0 jar 包 很全 part2

    EJB 3.0引入了许多改进,使得开发过程更加简洁,降低了对XML配置的依赖,并引入了注解驱动的编程模型,提升了开发效率。 `jbosall-client.jar`:这是JBoss应用服务器的客户端库,包含了与服务器通信所需的所有类和...

    EJB3.0实例教程 源代码

    EJB3.0是Java EE(企业版Java)平台中的一项关键组件,它简化了开发企业级应用的过程,提供了强大的组件模型,用于构建可扩展、安全和事务性的后端服务。 ### 1. EJB3.0核心概念 EJB3.0引入了许多改进,包括注解...

    ejb3.0实例教程及源码

    EJB3.0是EJB规范的一个重要版本,它引入了许多重大改进,极大地简化了开发过程,使得EJB更加易用且高效。本教程将深入讲解EJB3.0的关键特性,并提供实例教程和源代码,帮助开发者更好地理解和实践EJB3.0技术。 1. *...

    EJB实例教程及精通EJB3.0

    EJB实例教程与精通EJB3.0的学习资源可以帮助开发者深入理解这一技术,以下是对这两本资源的主要知识点的详细解读。 **EJB实例教程** 实例教程通常注重实践操作,通过具体的案例帮助学习者理解和掌握EJB的核心概念...

    ejb3.0学习资料PDF格式

    EJB 3.0是该技术的一个重要里程碑,它极大地简化了开发过程,引入了许多面向开发者友好的特性,如注解驱动的编程模型和轻量级的容器。 **1. 注解驱动编程** 在EJB 3.0中,开发者可以使用注解(Annotations)来声明...

    EJB3.0标准技术手册与JBoss实践指南第5版.rar

    《EJB3.0标准技术手册与JBoss实践指南第5版》是一部深入探讨企业级JavaBeans(EJB)3.0技术的权威著作,专为开发者提供了全面且实用的指导。EJB是Java平台上用于构建可扩展、安全且事务处理能力强的企业级应用的核心...

    EJB3.0个人笔记

    ### EJB3.0核心知识点概述 #### 一、EJB3.0简介与特性 **EJB(Enterprise JavaBeans)3.0** 是Java EE平台中的一个重要组成部分,旨在为开发分布式应用程序提供一种标准化的方法。相比于之前的版本,EJB 3.0引入了...

    EJB3.0实例教程pdf

    EJB3.0是Java EE 5规范的一部分,它极大地简化了EJB的开发,提高了开发效率,并引入了许多新特性。本教程将深入探讨EJB3.0的核心概念、设计模式以及实际应用。 ### 1. EJB3.0概述 EJB3.0的目标是降低开发复杂性,...

    学习EJB3.0(不是扫描版的,很清晰的,值得学习)

    EJB3.0是其第三个主要版本,发布于2006年,相较于之前的版本,EJB3.0引入了许多重大改进,使得开发过程更为简化,同时也增强了性能和可维护性。 **1. 注解驱动的开发** EJB3.0的一大革新是引入了注解(Annotations...

    EJB3.0教程(PDF)_LEO

    在"ejb3.0实例教程.pdf"中,你将找到一系列的实战例子,涵盖如何创建和使用上述各种类型的EJB。这些例子将指导你: 1. **创建实体Bean**:如何定义实体类,使用JPA注解映射数据库表,以及执行CRUD操作。 2. **使用...

    名片管理(EJB3.0)

    **名片管理(EJB3.0)** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,主要用于构建企业级应用程序。EJB3.0版本是EJB规范的一个重大革新,它极大地简化了EJB的开发,使得企业级开发变得更加易用和高效。...

    EJB3.0+JSF例子

    在"**EJB3.0+JSF例子**"教程中,你将学习如何结合使用这两种技术,创建一个完整的、功能丰富的Web应用程序。教程可能涵盖了从创建EJB Bean和JSF Managed Bean,到配置和部署应用,以及处理用户交互和事务处理的全...

    04.最新EJB 3.0实例教程.rar

    EJB 3.0是其一个重要版本,发布于2006年,带来了许多重大的改进和简化,使得开发过程更为简洁,降低了学习曲线。本教程将深入探讨EJB 3.0的核心概念、设计模式以及实际应用。 ### EJB 3.0 的主要改进 1. **注解...

    免费的企业级EJB3.0高级培训ppt6

    【企业级EJB3.0高级培训】是一个针对企业级应用开发的重要主题,尤其是对于Java开发者而言。EJB,全称Enterprise JavaBeans,是Java EE(Enterprise Edition)平台中的核心组件,用于构建分布式、事务处理和安全的...

Global site tag (gtag.js) - Google Analytics