要調用存儲過程,我們可以通過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