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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись двоичных даннных в SQLITE 3  (Прочитано 6708 раз)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« : Июнь 10, 2014, 20:49 »

Коллеги, я правильно понимаю, чтобы записать двоичные данные в Blob Sqlite, их нужно преобразовать в текстовый формат, например, путем кодирования в base64? Иначе говоря, QByteArray, содержащий нули (0x00) записать без преобразования не удастся?
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Июнь 10, 2014, 20:56 »

А что показали тесты?
Записан
Bepec
Гость
« Ответ #2 : Июнь 10, 2014, 20:59 »

sqlite насквозь текстовый. Преобразуйте в hex и будет вам счастье.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Июнь 11, 2014, 06:58 »

А что показали тесты?
Так то и показали... Но на упаковке написано "Blob", что ж, мне глазам не верить? Улыбающийся
sqlite насквозь текстовый. Преобразуйте в hex и будет вам счастье.
А в хексах он гораздо длиннее...
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Bepec
Гость
« Ответ #4 : Июнь 11, 2014, 14:44 »

Ну как ни гонись за скоростью, но SQLite именно Lite. Серьёзной скорости от него не добиться на больших массивах.
На преобразовании в строку теряется больше времени, чем на запись в базу Улыбающийся
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #5 : Июнь 11, 2014, 18:12 »

Ну как ни гонись за скоростью, но SQLite именно Lite. Серьёзной скорости от него не добиться на больших массивах.
На преобразовании в строку теряется больше времени, чем на запись в базу Улыбающийся
Согласен, конечно. Про хексы - это на рефлексах. Если можно сделать лучше, то нельзя делать как придется Подмигивающий
Вообще-то я делаю прототип, маленький кусочек. В проме это будет работать на MySQL.
И все равно, не могу понять Blob в Sqlite - что это за large B...
« Последнее редактирование: Июнь 11, 2014, 19:42 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
mitrich
Гость
« Ответ #6 : Июнь 12, 2014, 00:02 »

sqlite насквозь текстовый. Преобразуйте в hex и будет вам счастье.
Никакой он не текстовый, бинарные данные хранит как положено и преобразовывать ничего не надо. Функция sqlite3_bind_blob одним из параметров принимает размер данных.

И в драйвере, в зависимости от типа передаваемых данных используются нужные вызовы API:
Код
C++ (Qt)
switch (value.type()) {
case QVariant::ByteArray: {
   const QByteArray *ba = static_cast<const QByteArray*>(value.constData());
   res = sqlite3_bind_blob(d->stmt, i + 1, ba->constData(),
                           ba->size(), SQLITE_STATIC);
   break; }
 

Если не удаётся записать, может в QSqlQuery::bindValue() данные как-то неправильно передаете (напр., в виде char* вместо QByteArray)?

Код
C++ (Qt)
QSqlQuery query;
query.exec("CREATE TABLE t (              "
          "    id   INTEGER PRIMARY KEY, "
          "    data BLOB                 "
          ");                            ");
 
QByteArray data;
data.resize(5);
data[0] = 1;
data[1] = 0;
data[2] = 1;
data[3] = 0;
data[4] = 1;
 
query.prepare("INSERT INTO t(data) VALUES(?);");
query.bindValue(0, QVariant(data));
query.exec();
 
« Последнее редактирование: Июнь 12, 2014, 10:31 от mitrich » Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #7 : Июнь 16, 2014, 17:18 »

Спасибо! Был не прав, все пишется. Подвела смотрелка Грустный
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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