Как сохранить строку длиной более 4000 символов в базе данных Oracle с использованием Java / JDBC? - PullRequest
2 голосов
/ 22 мая 2010

Я не уверен, как использовать Java / JDBC для вставки очень длинной строки в базу данных Oracle.

У меня есть строка длиной более 4000 символов, скажем, это 6000. Я хочувозьмите эту строку и сохраните ее в базе данных Oracle.

Способ сделать это, похоже, с типом данных CLOB.Итак, я объявил столбец как описание CLOB.

Теперь, когда пришло время фактически вставить данные, у меня есть подготовленное утверждение pstmt.Похоже, pstmt = conn.prepareStatement(“INSERT INTO Table VALUES(?)”).

Поэтому я хочу использовать метод pstmt.setClob().Однако я не знаю, как создать объект Clob с моей строкой в ​​нем;нет конструктора (предположительно потому, что он потенциально может быть намного больше, чем доступная память).

Как поместить строку в Clob?

Имейте в виду, я не очень опытный программист;пожалуйста, постарайтесь сделать объяснения максимально простыми.Эффективность, передовой опыт и т. Д. Здесь не важны, я просто хочу самое простое решение.Я хотел бы избежать загрузки других пакетов, если это все возможно;сейчас я просто использую JDK 1.4 и то, что помечено ojdbc14.jar.Я немного осмотрелся, но не смог следовать ни одному из найденных объяснений.

Если у вас есть решение, которое не использует Клобса, я был бы открыт для этоготакже, но это должен быть один столбец.

Ответы [ 4 ]

7 голосов
/ 22 мая 2010

У вас есть (как минимум) два варианта:

  • используйте connection.createClob() для создания Clob, установите для него данные и установите его для подготовленного оператора. Это будет работать для небольших данных

  • используйте preparedStatement.setClob(position, reader) - здесь у вас будет Reader экземпляр.

1 голос
/ 25 июня 2018

Кроме того, в приведенном ниже решении объясняется, как справиться с этим с помощью PL / SQL

Ссылка: http://gogates.blogspot.com/2013/09/inserting-clob-data-which-is-more-than.html


Вставка данных CLOB длиной более 4000 символов в таблицу Oracle Iпытался вставить 4000+ символов данных в таблицу Oracle, имеющую CLOB в качестве типа данных, но не смог этого сделать, используя простой оператор вставки

Структура таблицы, которую я использовал, выглядит следующим образом

CREATE TABLE ClobTest (id number, clobData clob );

Структура таблицы довольно проста, имеет только 2 столбца числа и тип данных clob.

Теперь ... если вы выполните запрос ниже, он будет выполнен без ошибок

INSERT INTO ClobTest VALUES(1, 'ClobTestData');

Однако при увеличении длины набора данных 4000+ он не будет выполнен успешно и выдаст ошибку, как показано ниже

Отчет об ошибке: Ошибка SQL: ORA-01704: слишком длинный строковый литерал 01704.00000 - «строковый литерал слишком длинный» * Причина: строковый литерал длиннее 4000 символов.* Действие: использовать строковый литерал не более 4000 символов.Более длинные значения могут быть введены только с помощью переменных связывания.

После поиска этой проблемы, вы узнали, что, если вы хотите вставить данные типа 4000+ в тип данных CLOB, попробуйте сделать это с помощью PL-Блок SQL.

Основная причина этого заключается в том, что Oracle SQL не поддерживает тип данных char / varchar, который превышает 4000 символов;однако PL-SQL делает это.

Я использовал ниже анонимный pl-sql для вставки 4000+ символьных данных в тип данных CLOB

DECLARE

vClob VARCHAR(8000);

BEGIN

vClob := '<Charater data having 4000+ characters>';

INSERT INTO ClobTest VALUES(1, vClob);

END;

Чтобы проверить, действительно ли 4000+ знаков вставлено в цельВыполнен ниже запрос

SELECT LENGHT(clobData) FROM ClobTest 

Надеюсь, что поможет

1 голос
/ 22 мая 2010

Вот пример на oracle.com для использования столбцов больших объектов с Oracle и JDBC.По сути, он вставляет локатор большого объекта для пустого большого объекта (фактически двух, поскольку он демонстрирует как BLOB, так и CLOB), блокирует строку для обновления, а затем использует интерфейсы BLOB и CLOB OutputStream для записи данных в большие объекты.Когда "SELECT ... FOR UPDATE" будет выпущен, большие объекты будут обновлены в базе данных, и вновь вставленные данные будут видны.

0 голосов
/ 22 мая 2010
...