0

我制作了一些 JasperReports,并且在 Windows 机器上运行良好。当报告设置为在具有 zOS 操作系统的大型机上运行时,问题就开始了。

问题是:当 Jasper 创建报告时,它似乎从数据库中读取表元数据,并基于它期望数据到来。
示例:如果我有一列类型为 varchar(20),那么即使报告字段定义为字符串,Jasper 也只会等待 20 个字符。

这在 Windows 环境中不会发生,但在大型机上,字符编码是 EBCDIC,因此该列在大型机上可能有 19 个字符,但在编码时它以 23 或 24 个字符返回到报告中。

注意:此问题仅出现在非英文字符中。

Jasper 创建报告时抛出UPDATE
A ConversionBufferFull,我没有完整的跟踪,因为我无法访问大型机日志。当值约为 17-20 个字符时,只有一个名为 COUNTRY_DESC 的列会出现问题,会发生异常。

正如我提到的,大型机上的字符集是 EBCDIC,但是当它通过 JDBC 读取时,它会转换为 Unicode。例如,在 EBCDIC 中,单词将是 17 个字符,但在转换后变为 22。出于某种奇怪的原因,Jasper 仅希望该字段为 20。

4

2 回答 2

1

sun.io.ConversionBufferFullExceptionsun.io字符编码转换器抛出,并可能通过java.io旧版本 Java 中的类冒泡。此 API 已被弃用一段时间,并且自 Java 6 起不再使用 -java.nio.charset改为使用。

这是 JasperReports、您的 JDBC 驱动程序或这两者使用的东西中的字符转换错误。我认为这与从 JDBC ResultSet 本身读取元数据没有任何关系,尽管它可能是元数据中的字符串被错误地转换。

如果没有堆栈跟踪,就很难归咎或想出解决方法。

于 2009-12-22T12:00:33.003 回答
1

JasperReports 本身不管理数据转换,也不管理字段长度。这看起来像是 JDBC 驱动程序的问题。

谢尔曼 Jaspersoft

于 2009-12-23T19:09:24.027 回答