Столбец Clob java.sql.SQLException: ORA-01461: может связывать значение LONG только для вставки в столбец LONG

insertSQL = "insert into TELBP_INPUT_LOG (SERIAL_NO, INPUT_XML) values (?, ?)";
statement = connection.prepareStatement(insertSQL);
statement.setString(1, serialNo);
statement.setString(2, inXml);          
//statement.setString(2, "test");
insertCount = statement.executeUpdate();

когда программа запускается для executeUpdate(), ошибка

java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column  

выбрасывается, но если я скопирую значения serialNO и inXml и запустлю в SQL-разработчике, ошибки не выдается, в чем причина?

оракул версия:Oracle Database 10g Enterprise Edition выпуск 10.2.0.4.0 - 64bi
колонка:
SERIAL_NO VARCHAR2 (22)
INPUT_XML CLOB
Websphere: Websphere 5.1
jdbc: оба ojdbc14 и ojdbc6 перепробованы, оба имеют одинаковую ошибку

3 ответа

Вы не можете записать строку в столбец Clob.

Вместо

statement.setString(2, inXml); 

использование

statement.setClob(2, xmlClob);

Сначала вам нужно создать xmlClob:

Clob xmlClob = connection.createClob();
Writer clobWriter = myClob.setCharacterStream(1);
clobWriter.write(inXml); 

За clob поле, которое вы можете использовать.setClob(..)

setString():Sets the designated parameter to the given Java String value. The driver converts this to an SQL VARCHAR or LONGVARCHAR value (depending on the argument's size relative to the driver's limits on VARCHAR values) when it sends it to the database.

API DOC

CLOB API DOC

Java (основной драйвер) обрабатывает CLOB как символьный поток. Когда вы устанавливаете String, базовая реализация драйвера автоматически выполняет соответствующее преобразование (String в Varchar и т. Д.). Поскольку CLOB - это особый тип, программист несет ответственность за выполнение необходимых шагов. Перейдите по ссылке, чтобы узнать, как вставить clob с помощью java: http://docs.oracle.com/javase/tutorial/jdbc/basics/blob.html

Другие вопросы по тегам