大鱼

EJB调用存储过程

EJB调用存储过程
    
要调用存储过程,我们可以通过EntityManager 对象的createNativeQuery()方法执行SQL 语句(注意:这里说的是SQL 语句,不是EJB3 QL), 调用存储过程的SQL 格式如下:
     {call 存储过程名称(参数1, 参数2, … )}
     在EJB3 中你可以调用的存储过程有两种
     1.无返回值的存储过程。
     2.返回值为ResultSet(以select 形式返回的值)的存储过程,EJB3 不能调用以OUT 参数返回值的存储过程

1.调用无返回值的存储过程
   //调用无返回参数的存储过程
   Query query = em.createNativeQuery("{call Procedure()}");
   query.executeUpdate();

2.调用返回单值的存储过程
   //调用返回单个值的存储过程
   Query query = em.createNativeQuery("{call GetPersonName(?)}");
   query.setParameter(1, new Integer(1));
   String result = query.getSingleResult().toString();

3.调用返回表全部列的存储过程
   在调用存储过程时,可以让EJB3 Persistence 运行环境将列值直接填充入一个Entity 的实例(本例填充进Person 对象),并将实例作为结果返回
   //调用返回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.调用返回部分列的存储过程
   创建存储过程:
   CREATE PROCEDURE `GetPersonPartProperties`()
                  NOT DETERMINISTICSQL SECURITY DEFINER
                  COMMENT ''
   BEGIN
                  SELECT personid, personname from person;
   END;

   //调用返回部分列的存储过程
   Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
   List result = query.getResultList();

posted on 2009-09-24 17:28 大鱼 阅读(565) 评论(0)  编辑  收藏 所属分类: EJB


只有注册用户登录后才能发表评论。


网站导航: