У меня есть Java-программа, загружаемая в базу данных Oracle 11.2.0.3. Я использую внутренний драйвер Oracle Server-Side для связи с базой данных хоста.
Проблема в том, что когда я пытаюсь вставить данные в столбцы clob
Clob clob = targetCon.createClob();
clob.setString(1, (String) value);
insertStm.setClob(col, clob);
Я получаю сообщение об ошибке
Exception in thread "Root Thread" java.lang.NoSuchMethodError
Тот же код работает, если я вызываю его из автономной программы (работает за пределами базы данных). Информация о драйвере показывает Oracle JDBC driver version:11.2.0.3.0
в обоих случаях.
Я также попробовал следующий код
String s = (String) value;
StringReader stringReader = new StringReader(s);
insertStm.setCharacterStream(col, stringReader , s.length());
Но это дало мне
java.sql.BatchUpdateException: ORA-01460: unimplemented or unreasonable conversion requested
Doc ID 1484721.1 в моей службе поддержки Oracle дал указание использовать setClob()...
Почему мой код работает при запуске в качестве отдельной программы, но при попытке использования внутреннего драйвера (который имеет ту же версию) возникает ошибка?
Проблема, кажется, решена путем обертывания вставки внутри блока PL/SQL
BEGIN
INSERT id, c INTO clob_tab VALUES(?,?);
END;
и используя setCharacterStream, но мне все же интересно, почему исходный код генерирует NoSuchMethodError