点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
当前,当向SAP HANA发出查询以从JAVA应用程序获取一些记录时,我们会遇到一些问题。 我们在应用程序中使用的技术是:
- JDK 1.8.x。
- Spring Core 4.3.19.RELEASE。
- Spring Boot 1.5.16.RELEASE。
- 数据库SAP HANA 2.00.034.00.1539746999 PRODUCCION 。
- 数据库SAP HANA 2.00.042.00.1564994110 开发。
- 驱动程序JDBC ngdbc 2.3.62。
- HDB客户端2.3.144
数据库中大约有20、000、000条记录,因此应用程序按页面获取信息。 页面的大小为1,000,000条记录,而ResultSet的fechSize被配置为pageSize/4,即250,000条记录要保留在内存中。 对于每个读取的页面,信息都存储在文件FILE_NAME.TXT中。 在前八页(8、000、000条记录)中,似乎没有问题,但是在某些时候,驱动程序JDBC开始引发异常:
com.sap.db.jdbc.exceptions.Cesu8ConversionException:无效的CESU-8序列:[49、54、49、54、50、48、49、57、49、49、49、50、48 ,57、49、54、49、54、2、48、51、2、48、48,-1,-105,-102,-52、50、2、0、0、0、0、0、0 ,0、0、0、64、48、12、57、55、51、53、51、54、51、49、55、56、54、51、20、48、57]
重要的是要阐明,结构的数据库(表)没有任何CLOB或BLOB类型的字段。 所有字段的类型均为VARCHAR,DECIMAL,INTEGER。
04705881D294DAE216006600109AB107; 09875634; 985309; 2019-11-16; 20; XX; XXX;?; 00; X; 4673625091268437; 12345678922222222222222; 09; 00;?; 59076123689; 098767890987; 09876543212345678909;?;?; X; 0 ; 0; 80458127
希望您能帮助我。
提醒。
早上好,拉斯。
我无法更改数据库中列的定义,因为所有者未授权更改。 同时,您知道任何列中可能具有的功能" STRTOBIN"的作用吗? 换句话说,如果我在查询中应用函数" STRTOBIN",它将解决问题吗? 例如:
从表_1中选择COLUMN_1,STRBIN('COLUMN_2','UTF-8'),COLUMN_3;
我不知道,因此,我不了解驱动程序在读取数据时如何工作。 你觉得呢?
请注意。
不确定STRBIN函数在这里的适用范围。
如果我不能更改表,我将要做的只是转换数据类型
这样,您可以轻松地检查转换是否解决了问题,并且 每次进行转换的开销相对较小。 此处重要的是JDBC驱动程序将其视为结果集中的NVARCHAR列,并将其正确映射到java.String。
其中似乎存在多字节字符数据 VARCHAR列之一。 JDBC驱动程序尝试将数据转换为JAVA String,即UNICODE UTF-8,但是它期望数据为单字节(由于VARCHAR列数据类型)。
要解决此问题, 将这些列更改为NVARCHAR。
请注意,HANA不会停止多字节数据进入VARCHAR列;
感谢拉尔斯,我将列更改为NVARCHAR并向您报告结果。
祝您有美好的一天。
谢谢,感谢您的协助。 重要的是我们的问题似乎并不一致。 换句话说,我们可以在不同的记录范围内回答这个问题。
-在250万条记录中。
-在500万条记录中。
-在1000万条记录中。
-而且,在39万条记录中。
因此,您认为问题的原因是相同的吗?
有关。
一周热门 更多>