Как получить часть поля BLOBC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как получить часть поля BLOB

Сообщение Anonymous »

Я пытаюсь получить часть поля BLOB в запросе на выборку, например

Код: Выделить всё

subblobstr(BLOB_DATA,2,3)
Код следующий, его можно правильно скомпилировать, но он не работает: subblobstr(BLOB_DATA,2,3) по-прежнему получает тот же результат, что и substr(BLOB_DATA,2,3).

Код: Выделить всё

#include 
#include 
#include "sqlite3ext.h"
SQLITE_EXTENSION_INIT1

void subblobstr(sqlite3_context* ctx, int argc, sqlite3_value* argv[])
{
const char* blobdata;
int blob_len, start, slen;

blobdata = (char*)sqlite3_value_blob(argv[0]);
blob_len = sqlite3_value_bytes(argv[0]);
start = sqlite3_value_int(argv[1]) - 1;
slen = sqlite3_value_int(argv[2]);
sqlite3_result_blob(ctx, blobdata + start, slen, SQLITE_TRANSIENT);
}

int sqlite3SubBlobStrInit(sqlite3 *db){
sqlite3_create_function(db, "subblobstr",3,SQLITE_ANY, 0, subblobstr, 0, 0);
return 0;
}

int sqlite3_extension_init(
sqlite3 *db,
char **pzErrMsg,
const sqlite3_api_routines *pApi
){
SQLITE_EXTENSION_INIT2(pApi)
return sqlite3SubBlobStrInit(db);
}
Структура таблицы:



cid
имя
тип




0
ИМЯ
ТЕКСТ


1
BLOB_DATA
BLOB


Код: Выделить всё

BLOB_DATA
— это поле типа blob, содержащее одну строку размером 20 МБ, и я просто хочу отобразить первые несколько байтов строки, однако функция substr не работает, поскольку она останавливается на первом нулевом байте в BLOB_DATA, поэтому мне нужно написать функцию выше, чтобы решить проблему.
Таблица содержит много данных, но substr(BLOB_DATA,1,10) возвращает не более одной цифры.
Изображение

Цитата из CL:

значения в таблице являются строками, и в этом случае вам следует преобразовать их в большие двоичные объекты примерно так:

Код: Выделить всё

UPDATE MyTable SET blob_data = CAST(blob_data AS BLOB)

После выполнения приведенного выше оператора SQL произойдет сбой оболочки sqlite. (SQLite версии 3.7.15.2 Win7)

Я использую базу данных SQLite, но браузер для установки типа BLOB_DATA сначала (BLOB), затем substr(BLOB_DATA,1,10) по-прежнему возвращает 1 цифру.

Подробнее здесь: https://stackoverflow.com/questions/153 ... blob-field
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»