问题描述
最近有客户遇到存储过程做数据集的报表发布后报错:产生数据工厂: com.runqian.report4.dataset.ProcDataSetFactory 失败错误来源:: 索引中丢失 IN 或 OUT 参数:: 1 错误来源:索引中丢失 IN 或 OUT 参数:: 1
问题分析
出现这个问题的原因可以有如下几个:
1、 存储过程本身就不正确
2、 数据集输出参数位置不正确
3、 数据库驱动有问题
4、 reportConfig.xml文件中数据库类型不正确
排查步骤
遇到该问题,可以按照如下步骤排查:
一、让客户在数据库端执行存储过程,若不能正常执行,则说明是问题1引起;
二、查看报表存储过程数据集输出参数位置,需保证“输出参数”位置在第一位,如下图:
三、若在设计器中可以正常预览,但在自己的应用中报错,需将报表设计器下的数据库驱动拷贝到自身应用中,并将原来的驱动删除。该驱动位置在${设计器安装目录}\jdbc下:如D:\Program Files\reportHome\jdbc。
四、情况同三,若更换驱动后仍未解决就需要检查应用中的reportConfig.xml文件,查看其中的数据源配置处数据库类型是否有误。如有的客户这样配置:
<config>
<name>dataSource</name>
<value>itacms,itacms,1,iso-8859-1,GBK,0</value>
</config>
这显然是不正确的,所以需要将第二个itacms修改为oracle。关于这个选项的说明见下图:
基本上通过如上排查方法即可解决该问题。