EJB調(diào)用存儲過程
EJB調(diào)用存儲過程要調(diào)用存儲過程,我們可以通過EntityManager 對象的createNativeQuery()方法執(zhí)行SQL 語句(注意:這里說的是SQL 語句,不是EJB3 QL), 調(diào)用存儲過程的SQL 格式如下:
{call 存儲過程名稱(參數(shù)1, 參數(shù)2, … )}
在EJB3 中你可以調(diào)用的存儲過程有兩種
1.無返回值的存儲過程。
2.返回值為ResultSet(以select 形式返回的值)的存儲過程,EJB3 不能調(diào)用以O(shè)UT 參數(shù)返回值的存儲過程
1.調(diào)用無返回值的存儲過程
//調(diào)用無返回參數(shù)的存儲過程
Query query = em.createNativeQuery("{call Procedure()}");
query.executeUpdate();
2.調(diào)用返回單值的存儲過程
//調(diào)用返回單個值的存儲過程
Query query = em.createNativeQuery("{call GetPersonName(?)}");
query.setParameter(1, new Integer(1));
String result = query.getSingleResult().toString();
3.調(diào)用返回表全部列的存儲過程
在調(diào)用存儲過程時,可以讓EJB3 Persistence 運行環(huán)境將列值直接填充入一個Entity 的實例(本例填充進Person 對象),并將實例作為結(jié)果返回
//調(diào)用返回Person 全部列的存儲過程
Query query = em.createNativeQuery("{call GetPersonList()}", Person.class);
List result = query.getResultList();
存儲過程GetPersonList:
CREATE PROCEDURE `GetPersonList`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select * from person;
END;
4.調(diào)用返回部分列的存儲過程
創(chuàng)建存儲過程:
CREATE PROCEDURE `GetPersonPartProperties`()
NOT DETERMINISTICSQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT personid, personname from person;
END;
//調(diào)用返回部分列的存儲過程
Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
List result = query.getResultList();