Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

Вставка null через PreparedStatement (при работе с Sybase)

06.09.2013, 16:11. Показов 880. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть необходимость заливать данные в бд на sybase пачками.

При формировании этой пачки у меня есть
1)Запрос вида INSERT INTO sybtest3(id2, id3, val, d) VALUES(?, ?,?, ?);
2)Object[][] - аргументы для этого запроса, для запроса из примера это будет например Object[10][4];
3)Integer[] - типы тех аргументов что у нас есть (коды из sql.Types).

При формировании батча я делаю так:
Java
1
2
3
4
5
6
7
8
9
10
11
String sqlQuery = "INSERT INTO sybtest3(id2, id3, val, d) VALUES(?, ?,?, ?)";
Connection connection =  getDBConnection();
PreparedStatement ps = connection.prepareStatement(sqlQuery);
    for(int i=0;i<ySize;i++){
        for(int j=0;j<xSize;j++){
            Object ourObj = ((Object[])((ARRAY)args.get(j)).getArray())[i];//тип этого объекта я могу взять в Integer types[j]
            if(ourObj != null)
                ps.setObject(j+1,ourObj);
            else
                ps.setString(j+1,null);//Сработает для varchar и date, не сработает для numeric и unsigned int
        }
Ну и там дальше ps.addBatch(), а в конце ps.executeBatch().

Самое смешное что если в else делать ps.setNull(j+1, Types.NULL),что собственно и предназначено чтобы вставлять Null, то sybase выдаст IOException: JZ0SM: Unsupported SQL type 0, тоесть он именно забракует такой NULL потому что он не понимает этот тип. Мой вариант с setString(null) даёт обойти некоторые проблемы, но не все так как для чисел это не помогло. Что ещё можно придумать ?

P.S Используються jdbc драйвера sybase 2ой версии.

Добавлено через 21 час 3 минуты
Методом тыка определил что sybase понимает два Null'а:
1)Строковый для дат и строк.
2)Числовой для всего остального (любых чисел).
Так что в моём случае добавление null'а в preparedStatement для любого числового типа вот так:
Java
1
 ps.setBigDecimal(j+1, null);
решило проблему.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2013, 16:11
Ответы с готовыми решениями:

При работе с Json вылетает ошибка null reference
Есть условие if (WallParser.response.items.attachments.Count == 1) оно проверяет количество элементов в аттачах, но если аттачев нет,...

При вызове функции через queriesTableAdapter в dataSet возвращает null
Я сейчас сломаю свой компьютер!этот C#.... Извините накипело. Пожалуйста объясните почему при вызове функции через...

Скрыть MS Word при работе через Interop
Использую ворд для редактирования документа в программе. Но при работе программы, ворд открывается (хотя visible = false). Может я что то...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2013, 16:11
Помогаю со студенческими работами здесь

Пропадает интернет при работе через роутер
Здравствуйте! Помогите, пожалста, разобраться, в чем может быть проблема. Стационарный компьютер подключается к интернету через роутер...

Мерцание при работе через дискретную видеокарту
После поездки ноутбука в машине при работе через дискретную видеокарту идёт мерцание. Не могу понять в чем причина и связанно ли это с тем...

Проблема с сертификатом при работе через SQL
Была создана сборка, задача которой - скачивать файл посредством сертифика с заданного сайта. Я вытаскиваю сертификаты для того, чтобы...

Ошибка при работе с dbf через OLEDB
Доброго времени суток. Возникла такая проблема: из таблицы записываю данные в файл dbf. Записываются 1032 строки и после этого постоянно...

Использование SqlConnection при работе с БД через WCF
Добрый вечер всем! Подскажите пожалуйста, собираюсь работать с БД через обёртку в виде WCF сервисов. Сами же сервисы используют объекты...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru