【问题标题】:Reading Excel Data Issue From DB (CLOB Column) in Java with POI使用 POI 从 Java 中的 DB(CLOB 列)读取 Excel 数据问题
【发布时间】:2014-03-06 10:15:52
【问题描述】:

我有一个问题乍一看很难,但可能有一个非常简单的解决方案,我还无法弄清楚。我需要读取存储在 oracle 数据库 CLOB 列中的 excel 文件的二进制数据。

在java中将CLOB读取为字符串一切正常。我将excel文件作为字符串参数的二进制文件。

String respXLS = othRaw.getOperationData(); // here I get excel file
InputStream bais = new ByteArrayInputStream(respXLS.getBytes());

POIFSFileSystem fs = new POIFSFileSystem(bais);
HSSFWorkbook wb = new HSSFWorkbook(fs);

然后我尝试读取 ByteStreamData 并放入 POIFSFileSystem 但我得到了这个异常:

java.io.IOException: Invalid header signature; read 0x00003F1A3F113F3F, expected 0xE11AB1A1E011CFD0

我搜索了一些 excel 问题,他们提到了读取权限。因此,我将相同的 excel 文件下载到 hdd 并对其进行任何更改(即使我没有打开它),并通过提供文件路径来使用 FileInputStream。它完美无缺。那么是什么原因呢?

任何从 CLOB 阅读的建议或替代方式将不胜感激。

提前致谢, 我的问候。

【问题讨论】:

    标签: java apache-poi fileinputstream clob


    【解决方案1】:

    CLOB 表示字符大对象;您想使用 BLOB - 二进制 大型对象。更改您的数据库架构。

    发生的情况是 CLOB 将使用字符集将您的字符串转换为/从数据库内部格式转换,无论是什么;这将导致非文本内容的文件损坏。

    重复一遍:字符串不是字节[],字符也不是字节。

    【讨论】:

    • 感谢您的解决方法。
    猜你喜欢
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多