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();
когда программа запускается для выполненияUpdate(), ошибка
java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column
но если я скопирую значение serialNO и inXml и запустим в SQL-разработчике, ошибка не возникнет, в чем причина?
версия oracle: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
колонка:
SERIAL_NO VARCHAR2 (22)
INPUT_XML CLOB
Websphere: Websphere 5.1
jdbc: оба метода ojdbc14 и ojdbc6, оба имеют одну и ту же ошибку
Вы не можете написать String в столбец Clob.
Вместо
statement.setString(2, inXml);
использование
statement.setClob(2, xmlClob);
Сначала вам нужно создать xmlClob:
Clob xmlClob = connection.createClob();
Writer clobWriter = myClob.setCharacterStream(1);
clobWriter.write(inXml);
Java (базовый драйвер) рассматривает CLOB как поток символов. Когда вы устанавливаете String, основная реализация драйвера автоматически выполняет соответствующее преобразование (String to Varchar и т.д.). Поскольку CLOB является особым типом, программист должен выполнить необходимые шаги. Перейдите по ссылке, чтобы теперь вставить clob с помощью java: http://docs.oracle.com/javase/tutorial/jdbc/basics/blob.html
для поля 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 size relative to the driver limits on VARCHAR values) when it sends it to the database.