JDBC调用带CURSOR返回的存储过程的效率

knight12 2005-09-21 01:53:54
存储过程:Ea_Crmoss_Sync_Pg.query_switch_id_pr

存储过程本身返回CURSOR的速度还是比较快的,如下测试结果:
BEGIN
i_city:=NULL;
i_employee_c4:='上海市';
i_service_type:='PHY-MAN-0001';
i_county:='黄浦区';
i_address:='陆家浜路';
i_add_num:='';
i_switch_name:=NULL;
Ea_Crmoss_Sync_Pg.query_switch_id_pr
(i_city,i_county,i_address,i_add_num,i_switch_name,i_service_type,i_employee_c4,
o_return_status,o_error_msg,o_error_code,o_ptc_return_swt);
dbms_output.put_line('返回结果:'||o_return_status||'/'||o_error_msg);
IF o_return_status='OK' THEN
i:=1;
LOOP
FETCH o_ptc_return_swt INTO tabswitch;
EXIT WHEN o_ptc_return_swt%NOTFOUND;
dbms_output.put_line('ROWNUM='||i||' /'||tabswitch.exch_id||' /'||tabswitch.name||' /'||tabswitch.n1||' /'||
tabswitch.n2||' /'||tabswitch.areaname||' /'||tabswitch.c5name||' /'||tabswitch.n3);
i:=i+1;
END LOOP;
CLOSE o_ptc_return_swt;
END IF;
END ;
执行这段,CURSOR中返回100条结果集并打印的速度大约在1.5秒

放在JAVA程序中执行,当返回从CURSOR中取数据时,速度非常慢:

connection = dataSource.getConnection();
callstat = connection.prepareCall("{call Ea_Crmoss_Sync_Pg.query_switch_id_pr(?,?,?,?,?,?,?,?,?,?,?)}",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

callstat.setString(1, "");
callstat.setString(2, "");
callstat.setString(3, "");
callstat.setString(4, "");
callstat.setString(5, "");
callstat.setString(6, "");
callstat.setString(7, "");
callstat.registerOutParameter(8, oracle.jdbc.OracleTypes.VARCHAR);
callstat.registerOutParameter(9, oracle.jdbc.OracleTypes.VARCHAR);
callstat.registerOutParameter(10, oracle.jdbc.OracleTypes.VARCHAR);
callstat.registerOutParameter(11, oracle.jdbc.OracleTypes.VARCHAR);

callstat.execute();
ResultSet rsCursor = (ResultSet)callstat.getObject(11);
rsCursor.setFetchSize(100);

while(rsCursor.next())
{
System.out.println(...);
}
//等待很久才出100条记录,如果FetchSize设1,则等待约0.5秒出1条记录
...全文
143 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
knight12 2005-09-22
  • 打赏
  • 举报
回复
没人吗?
knight12 2005-09-21
  • 打赏
  • 举报
回复
自己顶一下
knight12 2005-09-21
  • 打赏
  • 举报
回复
驱动是BEA支持XA事务的驱动
柯本 2005-09-21
  • 打赏
  • 举报
回复
你是的是什么驱动方式thin还是oci8
如果是thin,效率是要低些,改oci8试试

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧