EJB3 调用的存储过程
要调用存储过程,我们可以通过 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 调用的存储过程的更多相关文章
- PHP调用MYSQL存储过程实例
PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一:无参的存储过程$conn = ...
- LoadRunner调用Oracle存储过程
为了测试这个存储过程,我遥了一圈去做这个事情,这里说一下我自己接受到任务和自己开始是怎么想的. 方法一: 一开始我想着可以使用C#直接去调用存储过程,然后用Loadrunner调用C#的dll去测试, ...
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
- SQL 语句调用这个存储过程,生成顺序编码
一直很讨厌存储过程,没想到今天帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧,不多说了,切入正题 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这 ...
- java代码调用oracle存储过程
一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...
- 调用MYSQL存储过程实例
PHP调用MYSQL存储过程实例 http://blog.csdn.net/ewing333/article/details/5906887 http://www.cnblogs.com/kkchen ...
- (转载)delphi 中如何调用sql 存储过程
delphi 中如何调用sql 存储过程 使用TADOStoredProc组件,可以,给你举个例子好了 with ADOStoredProc1 do begin Close; Parameters.C ...
- Jfinal调用Orcale存储过程
因为项目需要,最近一直在学习Orcale存储过程,但发现在网上很少有人写Jave中Jfinal调用Orcale存储过程的文章,即使有也是几年前的,很多都不能用,今天给大家分享一段Jfinal调用Orc ...
- Dynamics CRM - 使用 C# Plugin 调用 SQL 存储过程
有时候,在 Dynamics CRM Plugin 中通过 linq 查询数据会比较慢,可以通过采用在 C# plugin 中直接调用数据库存储过程的方式来提高效率,具体过程如下: 1.新建一个存储过 ...
随机推荐
- Java中的时间处理
日期时间组件使用 java.util.Date:实现类,其对象具有时间.日期组件.java.util.Calendar:抽象类,其对象具有时间.日期组件.java.sql.Date:实现类,其对象具有 ...
- underscore javascript工具库支持seajs模块化
underscore是一个很有用的js工具库,但是好像默认不支持seajs模块化 新建一个文件例如叫做xx.js 谈后,键入 define(function(require,exports,modul ...
- HDU 4171 Paper Route
Problem Description As a poor, tuition-ridden student, you've decided to take up a part time job as ...
- FZU 2122 ——又见LKity——————【KMP字符串匹配】
Problem 2122 又见LKity Accept: 413 Submit: 1425Time Limit: 1000 mSec Memory Limit : 32768 KB Pr ...
- java使用poi.3.10读取excel 2003 (xls格式)
最近在做一个Excel导入数据库的案例,整理文档出来供大家参考. 1.下载 最新的 poi http://poi.apache.org/download.html 2.解压 把相关jar包引进项 ...
- geth
>geth --networkid 123 --dev --datadir "d:/blockchain/project/ethereum" --rpc --rpcaddr ...
- CSP学习之导出密钥BLOB 解析
通过CryptExportKey( hKey, NULL, PUBLICKEYBLOB,0, NULL, &dwBlobLen) 函数导出的公钥信息如下: 06 02 00 00 00 A4 ...
- centos-7.2 node.js免编译安装
cd /usr/local/ wget https://npm.taobao.org/mirrors/node/v8.9.3/node-v8.9.3-linux-x64.tar.gz tar -zxv ...
- js获取css的各种样式并且设置他们
js原生获取css样式,并且设置,看似简单,其实并不简单,我们平时用的ele.style.样式,只能获取内嵌的样式,但是我们写的样式基本都在style属性里面; 这里我们就需要: 下面这个代码主要是设 ...
- 纯css 简单网页
<div id="wrapper"> <header> <section> <h1>Web Design<h1> < ...