你试图二进制数据直接插入到你的XMLType列,并且没有隐式转换为。假设你的文件实际上是文本,你可以把作为一个CLOB而非BLOB:
OraclePreparedStatement statement =
(OraclePreparedStatement) getConnection().prepareStatement(
"insert into person values(xmltype(?))");
FileInputStream fileinp = new FileInputStream(file);
InputStreamReader filerdr = new InputStreamReader(fileinp);
pStmt.setCharacterStream(1, filerdr, fileLength);
pStmt.executeUpdate();
注意语句现在使用xmltype(?)
(虽然它的工作原理没有,由于有来自CLOB隐式转换,但我认为无论如何,最好是明确的);和我使用的是InputStreamReader
通过的文本可以,而且也应该,使用一个缓冲的读者:
FileInputStream fileinp = new FileInputStream(file);
InputStreamReader filerdr = new InputStreamReader(fileinp);
BufferedReader filebuf = new BufferedReader(filerdr);
pStmt.setCharacterStream(1, filebuf, fileLength);
pStmt.executeUpdate();
与正常表XMLType列测试,并与一个XMLType表。
传递带有setBinaryStream的文本文件会混淆XMLType;用相同的有效文件,使用setBinaryStream()
得到错误:
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00210: expected '<' instead of '3'
有可能是周围的一种方式,但我假设你的文件只是文本,不会是一个CLOB的问题。