Russian Qt Forum
Октябрь 01, 2024, 14:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с битовыми полями  (Прочитано 7984 раз)
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« : Октябрь 28, 2009, 15:34 »

Нужно хранить и передавать длинные битовые поля
(например, архив из файлов)

Как организовать запись в таблицу из QByteArray и чтение из нее в QByteArray

Код:
  msgdata bit varying(4096)

 Непонимающий
QT 3.3.3 PostgreSQL
Записан

Как мало времени и как много нужно узнать
BaltikS
Гость
« Ответ #1 : Октябрь 28, 2009, 18:00 »

Элементарно.... Как и записываются остальные поля... В 3-ке в разделе SQL даже был кажется консольный пример записи и  чтения.
Код
C++ (Qt)
QByteArray ba = ...;
QSqlQuery query();
query.prepare("INSERT INTO mytable(id, bytefield) VALUES(?,?)");
query.bindValue(0, 1);
query.bindValue(1, ba);
query.exec();
 
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #2 : Октябрь 28, 2009, 18:07 »

т.е. о длине QByteArray можно не заботится?
Если помешается, то запишет, а если нет, то обрежет?
Записан

Как мало времени и как много нужно узнать
BaltikS
Гость
« Ответ #3 : Октябрь 28, 2009, 18:13 »

Насколько я помню тип bytea postgresql  - безразмерный. Возможно ограничение по размеру стоит в драйвере или в самих настройках postgresql, но могу на 99 % гарантировать файл в 30 метров записывается на ура.
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #4 : Ноябрь 01, 2009, 14:18 »

Просветите, пожалуйста, в PostgreSQL

bit varying

имеется ввиду последовательность битов или байтов?
Записан

Как мало времени и как много нужно узнать
BaltikS
Гость
« Ответ #5 : Ноябрь 01, 2009, 14:40 »

используй тип bytea... я же писал выше...
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #6 : Ноябрь 01, 2009, 15:16 »

Я имею ввиду, как рассчитывать размер поля в БД?
Как биты или как байты?
Записан

Как мало времени и как много нужно узнать
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #7 : Ноябрь 02, 2009, 14:07 »

Максимальный размер 83886080

Только, что это биты или байты?
Кто знает, подскажите, плииз Непонимающий
Записан

Как мало времени и как много нужно узнать
BaltikS
Гость
« Ответ #8 : Ноябрь 02, 2009, 17:36 »

Максимальный размер 83886080

Только, что это биты или байты?
Кто знает, подскажите, плииз Непонимающий
Вот описания типа bytea http://www.postgresql.org/docs/8.4/static/datatype-binary.html
По Вашим заданным вопросам не понятно, чего Вы хотите?

1) Ну откуда нам знать чего это 83886080? Наверное 83886080 попугаев.
2) Зачем рассчитывать размер поля в БД?
3) Если Вы хотите записать файл, используете тип bytea. Он автоматом разместит сколько требуется в памяти.
4) Записывается как? Я уже писал выше...
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #9 : Ноябрь 02, 2009, 18:50 »

В БД
Код:
CREATE TABLE inda
(
  msgdata varbit(83886076),
  ind int4 NOT NULL,
  CONSTRAINT inda_pkey PRIMARY KEY (ind)
)
таблица существует.

пришу
Код:
                QByteArray ba(10);
QSqlQuery sql();
sql.prepare("INSERT INTO inda (ind, msgdata) VALUES(?,?)");
sql.bindValue(0, 1);
sql.bindValue(1, ba);
if (sql.exec()) // записали?
{

}

 не пишет Непонимающий   
« Последнее редактирование: Ноябрь 02, 2009, 18:52 от Примерный ученик » Записан

Как мало времени и как много нужно узнать
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #10 : Ноябрь 02, 2009, 19:03 »

В логе PostgreSQL
Код:
2009-11-02 19:03:01 ERROR:  "\" is not a valid binary digit
Записан

Как мало времени и как много нужно узнать
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #11 : Ноябрь 02, 2009, 19:17 »

BaltikS, извини, тормозну. С полем типа
Код:
bytea

все проходит.
Я его просто не нашел среди типов данных PostgreSQL 7.4.1
 Злой
Букварь
Уорсли, Дрейк
PostgreSQL для профессионалов
« Последнее редактирование: Ноябрь 02, 2009, 19:22 от Примерный ученик » Записан

Как мало времени и как много нужно узнать
BaltikS
Гость
« Ответ #12 : Ноябрь 02, 2009, 20:26 »

Я его просто не нашел среди типов данных PostgreSQL 7.4.1
Букварь
Уорсли, Дрейк
PostgreSQL для профессионалов
Да, возможно, в 7 версии он назывался по-другому... Можно было просто указать тип BLOB и он его захавал...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 23.