如何使用Qt将二进制数据转换为插入PostgreSQL数据库?

时间:2012-02-15 12:29:00

标签: c++ qt postgresql

我正在尝试将二进制数据(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();

这样可行,但我收到以下错误:

  

警告:在字符串文字LINE 1中非标准使用\:... XECUTE
  qpsqlpstmt_1('\ _ 211PNG ...提示:使用转义字符串语法   反斜杠,例如E'\'

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

编辑:

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

我看到它的方式,在传递给E''::bytea之前,每个字节应该被bindValue包围。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:3)

查看.bindValue的{​​{3}} - 您最有可能需要docs该值为二进制:

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

答案 1 :(得分:0)

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

String literals and escape characters in postgresql