Вы пытаетесь вставить двоичные данные непосредственно в столбец 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.
person
Alex Poole
schedule
29.01.2014