Как избежать двоичных данных для вставки в базу данных PostgreSQL с помощью Qt? - PullRequest
2 голосов
/ 15 февраля 2012

Я пытаюсь вставить двоичные данные (QImage) в столбец PostgreSQL 8.4.9 bytea из Qt 4.8. Мой код выглядит так:

QImage image;
QByteArray ba;
QBuffer buffer(&ba);
image.save(&buffer, "PNG"); // Save the QImage data into the QBuffer

QSqlQuery query = QSqlQuery(database);
query.prepare("INSERT INTO images (image) "
              "VALUES (:image)");

query.bindValue(":image", ba);
query.exec();
qDebug() << query.lastError().text();

Это работает, но я получаю следующую ошибку:

ПРЕДУПРЕЖДЕНИЕ: нестандартное использование \ в строковом литерале LINE 1: ... XECUTE
qpsqlpstmt_1 ('\ 211PNG ... СОВЕТ: используйте синтаксис escape-строки для
обратная косая черта, например, E '\'

Как правильно избежать данных, чтобы избежать этого предупреждения?

РЕДАКТИРОВАТЬ:

Вот некоторая важная информация по этой теме: http://www.postgresql.org/docs/8.4/static/datatype-binary.html

Как я вижу, каждый байт должен быть окружен E''::bytea, прежде чем перейти к bindValue. Как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 15 февраля 2012

Посмотрите документы для .bindValue - вам, скорее всего, нужно указать , что значение является двоичным:

query.bindValue(":image", ba, QSql::In | QSql::Binary);
0 голосов
/ 15 февраля 2012

Вы пытались использовать E '' вокруг вашего QByteArray?Я не знаю, будет ли это работать для изображения, но, похоже, оно работает для строк.

Строковые литералы и экранирующие символы в postgresql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...