【问题标题】:How to escape binary data for insertion into PostgreSQL database with Qt?如何使用 Qt 转义二进制数据以插入 PostgreSQL 数据库?
【发布时间】:2012-02-15 12:28:59
【问题描述】:

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

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

【问题讨论】:

  • 我不确定你想通过提供列名应该去哪里的二进制数据来做什么(在你的 INSERT 语句中第一次提到:image)。
  • 那只是一个错字。我从代码中清除了与此问题无关的列,以使问题更笼统。

标签: c++ qt postgresql


【解决方案1】:

查看docs.bindValue - 您很可能需要indicate 的值是二进制的:

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

【讨论】:

  • 这没有任何作用。而且我认为应该是QSql::In | QSql::Binary
【解决方案2】:

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

String literals and escape characters in postgresql

【讨论】:

    猜你喜欢
    • 2013-12-14
    • 2014-04-11
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2016-04-27
    • 2016-01-26
    • 2015-12-06
    相关资源
    最近更新 更多