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

1
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, оба имеют одну и ту же ошибку

  • 0
    Какие типы столбцов SERIAL_NO и INPUT_XML?
Теги:
sqlexception

3 ответа

2

Вы не можете написать String в столбец Clob.

Вместо

statement.setString(2, inXml); 

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

statement.setClob(2, xmlClob);

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

Clob xmlClob = connection.createClob();
Writer clobWriter = myClob.setCharacterStream(1);
clobWriter.write(inXml); 
  • 0
    createClob () - это API Java 1.6, я просто использую Java 1.4, так какой-нибудь другой метод? и еще одна информация, в другой серверной среде, использующей websphere 7 и java 1.6 и использующей один и тот же код (setString ()), она не содержит ошибок !! Почему?
  • 0
    Я пытался найти 1.4 Javadoc в Интернете, но он настолько стар, что я не могу найти ни одного. Если у него действительно нет метода setClob (), вам может понадобиться использовать специфичный для Oracle API. Что касается 1.6, возможно, что эта более новая версия автоматически преобразует строки в Clobs для вас.
Показать ещё 1 комментарий
1

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

1

для поля 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.

API DOC

CLOB API DOC

Ещё вопросы

Сообщество Overcoder
Наверх
Меню