要呼叫儲存過程,我們可以通過 entitymanager 物件的 createnativequery()方法執行 sql 語句
(注意:這裡說的是sql 語句,不是 ejb3 ql),
呼叫儲存過程的 sql 格式如下:
在 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.executeupdate();
stringbuffer out = new stringbuffer("*************** querynonereturnvaluestoreprocedure 結果列印 ****************
");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.setparameter(1, new integer(1));
string result = query.getsingleresult().tostring();
stringbuffer out = new stringbuffer("*************** querysingleobjectstoreprocedure 結果打
}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.class); list result = query.getresultlist();
stringbuffer out = new stringbuffer("*************** querystoreprocedure 結果列印
****************");
if (result!=null)
}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()"); list result = query.getresultlist();
stringbuffer out = new stringbuffer("*************** querypartcolumnstoreprocedure 結果列印
****************");
if (result!=null)
}return out.tostring();
}sql2000的儲存過程呼叫
create table person(
personid int primary key ,
personname varchar(10) not null,
age varchar(10) not null,
*** varchar(10) not null
)select * from person
create procedure addperson
asbegin
insert into person values( 1,'儲存過程',1,25);
endcreate procedure getperson
@pid int
asbegin
select personname from person where personid=@pid;
endcreate procedure getonepart
asbegin
select personid ,personname from person ;
endcreate procedure getallperson
asbegin
select * from person ;
end
EJB3 0 註解列表
color red 會話bean與訊息驅動bean。color 1,會話bean。有狀態bean sataeful 無狀態bean sataeless 業務方法是有狀態會話bean的刪除方法 remove 使poji成為會話bean遠端業務介面 remote 使poji成為會話bean本地業務介面 ...
EJB3 0學習筆記
一.ejb3.0分為會話bean session bean mdb message driver bean 訊息驅動bean,實體bean entity bean 1.session bean 又分為有狀態的 stateful 和無狀態的 stateless stateful session bea...
Ejb3 0 獲取自增主鍵
相信很多朋友都跟我一樣對ejb3獲取自增id有困惑,我自己也煩惱了很久。網路上很多人都說 public integer add object p 這種方法可以獲取到自增的id 我嘗試過這種方法獲取自增的id,但是我獲取的id與資料庫序列自增的id不同 最後谷歌了一下,發現只要把觸發器定義在實體bea...