数据从驱动程序JDBC转换到SAP HANA数据库时出错。

2020-08-24 09:07发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


美好的一天。

当前,我们有一个JAVA应用程序,可从数据库中通过驱动程序JDBC ngdbc-2.4.67.jar获取数据

SAP HANA 2.00.044.00.1571081837。 在大多数情况下,当应用程序正在读取数据并且将这些格式从二进制格式转换为字符串,int或十进制格式时,会出现错误,指示数组溢出。 下一个有关此问题的细节:

原因:java.lang.ArrayIndexOutOfBoundsException:7028547

com.sap.db.util.ByteUtils.getUByte(ByteUtils.java:38)〜[ngdbc-2.4 .67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376bf8d7c4]

com.sap.db.jdbc.packet.HPart.getUByte(HPart.java:62)〜[ngdbc-2.4.67.jar! /:2.4.67-3028d4615dae104ed3de580c64399b376bf8d7c4]

在com.sap.db.jdbc.packet.HDataPart._getFieldLengthFromDataLengthIndicator(HDataPart.java:1127)〜[ngdbc-2.4.67.jar!/:2.467。 -3028d4 \

615dae104ed3de580c64399b376bf8d7c4]
在com.sap.db.jdbc.packet.HDataPart._getFieldLength(HDataPart.java:1101)〜[ngdbc-2.4.67.jar!/:: 2.4.67-3028d4615dae104ed3de580c64399 \
b376bf8d7c4]
在com.sap.db.jdbc.packet.HDataPart._nextField(HDataPart.java:1033)〜[ngdbc-2.4.67.jar !/:2.4.67-3028d4615dae104ed3de580c64399b376b \

f8d7c4]

在com.sap.db.jdbc.packet.HDataPart.nextRecord(HDataPart.java:281)〜[ngdbc-2.4。 67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376bf \

8d7c4 ]

com.sap.db.jdbc.FetchChunk.nextRow(FetchChunk.java:111)〜[ngdbc-2.4.67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376b376bf8d7c4]

在com.sap.db.jdbc.ResultSetSapDB._next(ResultSetSapDB.java:4624)〜[ngdbc-2.4.67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376bf8 \

d7c4]

> com.sap.db.jdbc.ResultSetSapDB.next(ResultSetSapDB.java:157)〜[ngdbc-2.4.67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376bf8d7 \

c4]

有人可以帮助我解决这个问题吗?

问候。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


美好的一天。

当前,我们有一个JAVA应用程序,可从数据库中通过驱动程序JDBC ngdbc-2.4.67.jar获取数据

SAP HANA 2.00.044.00.1571081837。 在大多数情况下,当应用程序正在读取数据并且将这些格式从二进制格式转换为字符串,int或十进制格式时,会出现错误,指示数组溢出。 下一个有关此问题的细节:

原因:java.lang.ArrayIndexOutOfBoundsException:7028547

com.sap.db.util.ByteUtils.getUByte(ByteUtils.java:38)〜[ngdbc-2.4 .67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376bf8d7c4]

com.sap.db.jdbc.packet.HPart.getUByte(HPart.java:62)〜[ngdbc-2.4.67.jar! /:2.4.67-3028d4615dae104ed3de580c64399b376bf8d7c4]

在com.sap.db.jdbc.packet.HDataPart._getFieldLengthFromDataLengthIndicator(HDataPart.java:1127)〜[ngdbc-2.4.67.jar!/:2.467。 -3028d4 \

615dae104ed3de580c64399b376bf8d7c4]
在com.sap.db.jdbc.packet.HDataPart._getFieldLength(HDataPart.java:1101)〜[ngdbc-2.4.67.jar!/:: 2.4.67-3028d4615dae104ed3de580c64399 \
b376bf8d7c4]
在com.sap.db.jdbc.packet.HDataPart._nextField(HDataPart.java:1033)〜[ngdbc-2.4.67.jar !/:2.4.67-3028d4615dae104ed3de580c64399b376b \

f8d7c4]

在com.sap.db.jdbc.packet.HDataPart.nextRecord(HDataPart.java:281)〜[ngdbc-2.4。 67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376bf \

8d7c4 ]

com.sap.db.jdbc.FetchChunk.nextRow(FetchChunk.java:111)〜[ngdbc-2.4.67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376b376bf8d7c4]

在com.sap.db.jdbc.ResultSetSapDB._next(ResultSetSapDB.java:4624)〜[ngdbc-2.4.67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376bf8 \

d7c4]

> com.sap.db.jdbc.ResultSetSapDB.next(ResultSetSapDB.java:157)〜[ngdbc-2.4.67.jar!/:2.4.67-3028d4615dae104ed3de580c64399b376bf8d7 \

c4]

有人可以帮助我解决这个问题吗?

问候。

付费偷看设置
发送
10条回答
Haoba3210
1楼-- · 2020-08-24 09:27

Lars,还有一个 时间,非常感谢您的时间。

当然,我认为setFetchSize不是问题。 另一方面,bouns索引是可变的,为方便起见,我将值设置为7028547。

此外,当问题在开发环境中得到答复时,支持团队要求我生成JDBC跟踪文件,但是跟踪文件不包含可能指示出问题原因的详细信息。 您对此有何评论?

致谢。

hongfeng1314
2楼-- · 2020-08-24 09:24

不,我在这里没有其他评论。 JDBC驱动程序代码中会发生此错误,在该代码中,它会将来自HANA有线协议的数据重新组合回JAVA数据结构。 为了对此进行分析,该驱动程序的源代码是必需的,但仅对SAP开发人员可用(即对我而言不是)。

在这一点上,我所能建议的只是跟进支持事件,并查看是否仅将fetchSize放在一起将不会导致错误发生。

哎,真难
3楼-- · 2020-08-24 09:18

Lars美好的一天。

出于政治考虑,我有点忙,我想告诉你,到目前为止,跟踪文件一直没有用。 我们可以找到解决问题的方法。

另一方面,我确认您确认数字7028547对应于数组的索引。 在其他测试中,fetchSize的值为250000条记录,因为resultSet为1000000条记录。

例如,我刚刚使用另一个数据集和默认的fectchsize执行了另一个测试,结果是:

java.lang.ArrayIndexOutOfBoundsException:90958
在com.sap.db.util.ByteUtils.getUByte(ByteUtils.java:38)
在com.sap.db.jdbc.packet.HPart.getUByte( HPart.java:62)
com.sap.db.jdbc.packet.HDataPart._getFieldLengthFromDataLengthIndicator(HDataPart.java:1127)
com.sap.db.jdbc.packet.HDataPart._getFieldLength(HDataPart。 java:1101)
com.sap.db.jdbc.packet.HDataPart._nextField(HDataPart.java:1033)
com.sap.db.jdbc.packet.HDataPart.moveToField(HDataPart.java: 304)
com.sap.db.jdbc.ResultSetSapDB._getDataPart(ResultSetSapDB.java:4861)
com.sap.db.jdbc.ResultSetSapDB.getNString(ResultSetSapDB.java:3370)

您有什么意见吗?

致谢。

一只江湖小虾
4楼-- · 2020-08-24 09:37

非常感谢您的建议。 如果我有关于解决方案的一些信息,我会分享。

致谢。

一周热门 更多>