![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
lazycat |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
Доброго времени суток всем!
При попытке записи в базу:
получаю исключение. ORA-01704: string literal too long Действительно, длина строки 17К, более чем в 4 раза превышает допустимые 4000 символов, но Есть ли возможность это обойти? (Я уверен, что есть, иначе как бы записывались длинные записи?) Заранее благодарен всем откликнувшимся! |
|||
|
||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
||||
|
||||
lazycat |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
Прошу прощения, забыл сказать. СУБД - Oracle. Указываю "jdbc:oracle:thin:@адрес:порт:схема" У меня CLOB, но это несущественно. Я бы рад писать в CLOB, но как это сделать? Или execute() / executeUpdate() - это не единственный вариант записи? |
|||
|
||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
Насколько я помню, данные в CLOB пишутся через поток. Сейчас поищу пример
Добавлено через 2 минуты и 52 секунды Можно покурить обсуждение, там несколько вариантов. Добавлено через 5 минут и 25 секунд Основная мысль там:
и ниже - пример. |
|||
|
||||
lazycat |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
По-моему, мы о разном говорим.
У меня есть база, мне надо инсертить в таблицу. Формирую строку с SQL-запросом INSERT. Строка получается 17K длиной. Метод execute вываливается по исключению "слишком длинная строка". Я в упор не могу понять, где здесь место CLOBу или BLOBу. То, что одно из полей у меня CLOB никак не отменяет тот факт, что в методах execute() параметр только типа String. |
|||
|
||||
4epT |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Дело в том что есть ограничение на длину самого insert ... такой insert нужно сделать через select for update.
Вот пример:
fieldName - имя столбца CLOB, tableName - имя таблицы, id - номер поля в которое сохраняешь CLOB Естественно перед сохранением нужно сделать insert с пустым CLOB:
Данный код работает) проверено ... Возможно есть и другие способы. |
||||
|
|||||
lazycat |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
Огромное спасибо Maksym и 4epT (в особенности 4epT !!!) за помощь !!!
Подход "создать запись а затем обновить в нем CLOB" прекрасно работает. Кстати, в данном случае возиться с потоком совсем не обязательно. Объект Clob не накладывает ограничение на длину строки, поэтому вполне можно применять метод setString(), что я и сделал. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |