首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

EJB3.0中运用oracle存储过程返回结果集或单一对象

2013-03-26 
EJB3.0中使用oracle存储过程返回结果集或单一对象(本人非计算机专业的,计算机术语不太专业)本人刚接触到存

EJB3.0中使用oracle存储过程返回结果集或单一对象
(本人非计算机专业的,计算机术语不太专业)
本人刚接触到存储过程,确实感到它处理大量数据的速度,原本要4分钟的数据处理经过存储过程后只需4秒种就完成了,但对存储过程中的出现异常处理怎样处理不太了解,最近二天终于把存储过程的返回结果集在EJB3.0的环境中整理出来了;
一般情况下,大家都会直接在代码中用jdbc来获取数据源信息:
...
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@10.0.1.224:1521:XXX";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
    Class.forName(driver);
    conn =  DriverManager.getConnection(strUrl, "XXX", "***");
    CallableStatement proc = null;
    proc = conn.prepareCall("{call proc_test(?,?)}");
    proc.setString(1, "test");
    proc.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
    proc.execute();
    ...
   }catch(...){
   ...
}
...

这样的话个人觉得十分不方便,如果数据源一改动就能去变代码。。。
但如果写一个方法去获得数据源配置信息(xml文件等),又显得很复杂与麻烦,
经过请教与查询后 在seam 中可以直接用HibernateSessionProxy,来直接获取数据源信息,十分方便。代码如下
...
HibernateSessionProxy proxy=(HibernateSessionProxy)this.getEntityManager().getDelegate();
Connection connection=proxy.connection();
  try {
     CallableStatement call=connection.prepareCall("{procs.test(?,?)}");
call.setString(1, empIds);
call.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
call.execute();
...

这样写的话就十分方便 。当然就能在EJB中获取Out的返回值了(之前看到了很多文章都用EJB3.0环境下不能获得,看样子就可以的!)

呵呵 现在要获得返回结果集就 非常方便呀
ResultSet rsResult = (ResultSet) call.getObject(2); 此时 上面的 call.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);

如果是获得存储过程中参数为 out varchar(2)

String  str=call.getgetString(5);
其它的类推 ,希望这个对刚接触存储过程的朋友有帮助。
如果写的过程中有什么问题,请帮忙纠正,谢谢。。。



我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html

热点排行