天天看點

EJB3中用JPQL調用存儲過程

要調用存儲過程,我們可以通過EntityManager 對象的createNativeQuery()方法執行SQL 語句(注意:這裡說的是

SQL 語句,不是EJB3 QL), 調用存儲過程的SQL 格式如下:

{call 存儲過程名稱(參數1, 參數2, … )}

在EJB3 中你可以調用的存儲過程有兩種

1.無傳回值的存儲過程。

2.傳回值為ResultSet(以select 形式傳回的值)的存儲過程,EJB3 不能調用以OUT 參數傳回值的存儲過程。

建立一個名為AddPerson 的存儲過程

CREATE PROCEDURE AddPerson as

BEGIN

INSERT into person(PersonName,sex,age) values ('admin',1,25)

END

GO

無傳回值存儲過程的調用方法:

private String QueryNoneReturnValueStoreProcedure() {

// 調用無傳回參數的存儲過程

Query query = em.createNativeQuery("{call AddPerson()}");

query.executeUpdate();

StringBuffer out = new StringBuffer(

"*************** QueryNoneReturnValueStoreProcedure 結果列印 ****************<BR>");

return out.toString();

調用傳回單值的存儲過程

CREATE PROCEDURE GetPersonName  (@pid int)   as

BEGIN

select personname from person where ;

END

GO

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();

}

調用傳回表全部列的存儲過程

CREATE PROCEDURE  GetPersonList as

BEGIN

select * from person;

END;

GO

private String QueryStoreProcedure() {

// 調用傳回Person全部屬性的存儲過程

Query query = em.createNativeQuery("{call GetPersonList()}",

Person.class);

List result = query.getResultList();

StringBuffer out = new StringBuffer(

"*************** QueryStoreProcedure 結果列印 ****************<BR>");

if (result != null) {

Iterator iterator = result.iterator();

while (iterator.hasNext()) {

Person person = (Person) iterator.next();

out.append(person.getName() + "<BR>");

}

}

return out.toString();

}

調用傳回部分列的存儲過程

CREATE PROCEDURE  GetPersonPartProperties as

BEGIN

SELECT personid, personname from person;

END;

GO

private String QueryPartColumnStoreProcedure() {

// 調用傳回記錄集部分列的存儲過程

Query query = em.createNativeQuery("{call GetPersonPartProperties()}");

List result = query.getResultList();

StringBuffer out = new StringBuffer(

"*************** QueryPartColumnStoreProcedure 結果列印 ****************<BR>");

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();

}

以上轉自:http://blog.csdn.net/zxl315/archive/2008/04/02/2245770.aspx