(本人非计算机专业的,计算机术语不太专业)
本人刚接触到存储过程,确实感到它处理大量数据的速度,原本要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);
其它的类推 ,希望这个对刚接触存储过程的朋友有帮助。
如果写的过程中有什么问题,请帮忙纠正,谢谢。。。
本人刚接触到存储过程,确实感到它处理大量数据的速度,原本要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);
其它的类推 ,希望这个对刚接触存储过程的朋友有帮助。
如果写的过程中有什么问题,请帮忙纠正,谢谢。。。