如何用Qt转义二进制数据以插入PostgreSQL数据库

How to escape binary data for insertion into PostgreSQL database with Qt?

本文关键字:插入 PostgreSQL 数据库 数据 二进制 何用 Qt 转义      更新时间:2023-10-16

我正试图将二进制数据(QImage)插入到Qt 4.8中的PostgreSQL 8.4.9 bytea列中。我的代码如下:

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();

这是有效的,但我得到以下错误:

警告:字符串文字第1行中\的非标准使用:。。。XECUTE
qpsqlpstmt_1('\211PNG…提示:使用
的转义字符串语法反斜杠,例如e''

如何正确地转义数据以避免此警告?

编辑:

以下是有关此主题的一些重要信息:http://www.postgresql.org/docs/8.4/static/datatype-binary.html

在我看来,在传递给bindValue之前,每个字节都应该被E''::bytea包围。我怎样才能做到这一点?

查看.bindValue的文档-您可能需要指出该值是二进制的:

query.bindValue(":image", ba, QSql::In | QSql::Binary);

您是否尝试在QByteArray周围使用E''?我不知道这是否适用于图像,但它似乎适用于字符串。

postgresql 中的字符串文字和转义字符