Добавление с помощью псевдозапроса
Синтаксические правила
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.