![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
legat |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 10 Регистрация: 8.8.2010 Пользователь №: 1940 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Имеются запросы к SQLite БД по созданию таблицы и добавления в неё бинарных данных:
Сам запрос я формирую в строке str следующим образом:
Вопрос: Как мне передать в строку бинарные данные, которые могут содержать \0 и прочие служебные символы в середине, чтобы не было потери данных. blobData предположительно char *. Не могу пока найти, что использовать для бинарных данным в строке формата вместо %s. Можно, конечно, передавать в строку в цикле побайтово из blobData. Но это слишком не эффективно. К тому же не ясно, что делать с \0-ми. |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
legat, у меня вопрос:
Отвлечёмся от программирования на Си\Си++. Оставим один SQL. Как ты в запрос: Insert into files( file ) values( '%s' ) собираешься помещать двоичные данные? |
|
|
legat |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 10 Регистрация: 8.8.2010 Пользователь №: 1940 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
legat, у меня вопрос: Отвлечёмся от программирования на Си\Си++. Оставим один SQL. Как ты в запрос: Insert into files( file ) values( '%s' ) собираешься помещать двоичные данные? Двоичные данные - это массив байтов. В терминах С++ можно представить как массив char. Следовательно передаётся в sql запрос как строка. Проблема только в том, что символом \0 строка зарубается на середине и соответственно теряются данные. Я поэтому и хочу понять, как можно передать корректно двоичные данные в запрос. Понятно, что %s временное условно работающее решение. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
jrjr |
![]()
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 5.6.2011 Пользователь №: 2719 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Имеются запросы к SQLite БД по созданию таблицы и добавления в неё бинарных данных:
Сам запрос я формирую в строке str следующим образом:
Вопрос: Как мне передать в строку бинарные данные, которые могут содержать \0 и прочие служебные символы в середине, чтобы не было потери данных. blobData предположительно char *. Не могу пока найти, что использовать для бинарных данным в строке формата вместо %s. Можно, конечно, передавать в строку в цикле побайтово из blobData. Но это слишком не эффективно. К тому же не ясно, что делать с \0-ми. Например экранировать их? Эта проблема настолько стара насколько существует SQL. По запросу "экранирование служебных символов" ты найдешь все что нужно. Имеются запросы к SQLite БД по созданию таблицы и добавления в неё бинарных данных:
Сам запрос я формирую в строке str следующим образом:
Вопрос: Как мне передать в строку бинарные данные, которые могут содержать \0 и прочие служебные символы в середине, чтобы не было потери данных. blobData предположительно char *. Не могу пока найти, что использовать для бинарных данным в строке формата вместо %s. Можно, конечно, передавать в строку в цикле побайтово из blobData. Но это слишком не эффективно. К тому же не ясно, что делать с \0-ми. Например экранировать их? Эта проблема настолько стара насколько существует SQL. По запросу "экранирование служебных символов" ты найдешь все что нужно. Например на вскидку можно перед символом \0 вставить \ и все будет ок. |
|
|
Iron Bug |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
это ересь какая-то. я не знаю, какая библиотека используется автором вопроса, но вообще, сами SQLite имеют превосходную библиотеку и к ней есть документация, с примерами. и там есть функции работы с блобами sqlite3_blob_ХХХ.
|
|
|
PAFOS |
![]()
Сообщение
#7
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: ![]() ![]() ![]() |
Как вариант (ну не пинайте за его глупость) можно перед вставкой перекодировать двоичные данный в BASE64.
BASE64 собственно и придумали чтобы двоичные данные передавать по текстовым протоколам а-ля HTTP. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 28.6.2025, 12:56 |