你試圖二進制數據直接插入到你的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的問題。