2014-03-06 91 views
0

我有一个问题在第一眼看起来很难,但也许有一个非常简单的解决方案,我不知道它。我需要读取存储在oracle数据库CLOB列中的excel文件的二进制数据。使用POI读取Java数据库(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 

我GOOGLE了一些出类拔萃的问题,他们提到有关读取权限。所以我把相同的excel文件下载到hdd,并且没有任何改变(即使我没有打开它),并通过给文件路径使用FileInputStream。它工作完美无瑕。那么是什么原因?

任何意见或从CLOB读取的替代方法将不胜感激。

在此先感谢, 我的问候。

回答

2

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

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

在我之后重复:字符串不是字节[],并且字符不是字节。

+0

谢谢你的解决方法。 –