Добавление с помощью псевдозапроса
Синтаксические правила
BLOB INSERT | APPEND
{ROWID=< rowid записи > [< имя схемы >.]< имя таблицы >.< имя столбца >
|COLUMN=< номер столбца >}
{FILE=< спецификация файла > | < BLOB-значение >}
< BLOB-значение >::=< строка шестнадцатеричных символов >| '< символьная строка >'

Все имена в команде могут задаваться в двойных кавычках.

blob insert rowid=250 "Админ"."Авто"."Модель" '1234567890';
Описание

Опция ROWID задает внутренний идентификатор строки в таблице, к которой относится BLOB-команда. При её использовании требуется обязательное указание имени столбца таблицы (не выборки данных !) с указанием имени таблицы и опционально имени схемы. При обработке данной опции СУБД самостоятельно выполняет новый SELECT-запрос, для получения записи с указанным ROWID, в результате чего текущая выборка данных будет испорчена.

blob insert t rowid=250 tst.blb 342f45aaf0;

Если задана опция COLUMN, все операции с BLOB-данными применяются к указанному столбцу текущей записи последней выборки данных. Отсчет столбцов начинается с 1. Если опция не задана, по умолчанию используется первый BLOB-столбец выборки.

blob append ffcc0011;
blob append column 3 'блог пользователя …';

Опция FILE задает спецификацию файла (в терминах текущей ОС), содержащего добавляемые BLOB-данные. Возможность доступна только при сборке Qt-драйвера с установленным макросом ENABLE_ACCESS_BLOBFILE (по умолчанию выключен).

< Строка шестнадцатеричных символов > – BLOB-данные для вставки/добавления, представленные в виде непрерывной последовательности шестнадцатеричных цифр.

< Символьная строка > – BLOB-данные для вставки/добавления, представленные в виде символьной строки в нужной кодировке.

blob append column=3 file=c:\blob\my_foto.png;

Команды INSERT и APPEND функционально идентичны друг другу, отличаются они только тем, что при выполнении команды INSERT предварительно выполняется очистка BLOB-значения.

q.exec("blob append 'text data'");
q.exec("blob insert A2C3BF12");

BLOB-данные могут быть взяты из массива QByteArray. Для этого он должен быть привязан в качестве нулевого параметра.

QByteArray ba("abcd", 4);
q.exec("select * from test");
q.prepare("blob insert");
q.bindValue(0, ba);

Длина порции вставляемых/добавляемых BLOB-данных принимается равной длине массива QByteArray. Она может быть также задана явно привязкой в параметре номер 1. Тогда в качестве размера порции будет выбрано минимальное значение из размера массива QByteArray и явно указанной длины порции.

В параметрах с номерами 2 и 3 может быть указан тип добавляемого BLOB-значения и столбец в выборке данных, к BLOB-данным которого должна быть добавлена порция данных. Если значения этих параметров не заданы, то по умолчанию тип добавляемых BLOB-данных берется равным 0, а столбец, к которому добавляется порция данных – первый BLOB-столбец выборки данных.

q.prepare("blob append");
q.bindValue(0, ba); // Data array
q.bindValue(1, 1); // Data size
q.bindValue(2, 14); // type
q.bindValue(3, 3); // column

Если указать опцию ROWID и имя столбца с таблицей, то возможно добавление BLOB-данных без предварительной выборки данных, по имени таблицы, столбца и ROWID. В этом случае выборка данных будет осуществлена в процессе выполнения запроса.

Команда APPEND добавляет порцию BLOB-данных в конец BLOB-значения.

Команда INSERT эквивалентна последовательности команд CLEAR и APPEND.

Примечание

В случае претрансляции запроса (псевдозапроса) существует возможность модифицировать его поведение путем привязки параметров. Это возможно только в случае операций над выборкой. На запрос с опцией ROWID привязка параметров не действует.

Для команд INSERT, APPEND возможна привязка 4-х параметров, каждый из которых опционален:

  • параметр с номером 0 задает адрес массива типа QByteArray, содержимое которого будет вставлено (добавлено) в BLOB-поле. Размер данных подразумевается равным размеру QByteArray (метод size()). Если параметр не привязан, используется пустой внутренний буфер QByteArray;

  • параметр с номером 1 указывает размер вставляемой (добавляемой) порции BLOB-данных. Для вставки выбирается наименьший размер между заданным и размером массива QByteArray. Если параметр не привязан, используется размер данных, равный размеру массива QByteArray;

  • параметр с номером 2 указывает тип вставляемых BLOB-данных. Если параметр не указан, подразумевается 0 (в команде APPEND параметр игнорируется);

  • параметр с номером 3 указывает номер BLOB-столбца в выборке данных, в который должны быть вставлены (добавлены) BLOB-данные. Если параметр не указан, подразумевается первый BLOB-столбец в выборке данных.

Тип добавляемых (вставляемых) BLOB-данных равен 0.