【问题标题】:How can I dump SQLite database tables (that uses BLOB type) using Qt?如何使用 Qt 转储 SQLite 数据库表(使用 BLOB 类型)?
【发布时间】:2017-05-28 00:52:22
【问题描述】:

如何使用 Qt 转储 SQLite 数据库表(使用 BLOB 类型)?

我有一个QVector<double>,我将其转换为QByteArray,并将其作为BLOB保存到数据库中。

我正在使用以下函数将QVector<double> 序列化为QByteArray

QByteArray Serialize::serialize(QVector<double> data)
{
    QByteArray byteArray;
    QDataStream out(&byteArray, QIODevice::WriteOnly);
    out << data;
    return byteArray;
}

当我从数据库加载 BLOB 字段时,我使用反序列化函数再次获取 QVector&lt;double&gt;

void Serialize::deserialize(QByteArray byteArray, QVector<double> *data)
{
    QDataStream in(&byteArray, QIODevice::ReadOnly);
    in >> *data;
}

here 所述,.dump 命令是在 sqlite 命令行应用程序中实现的,而不是在 SQLite 库本身中实现的。然后,据我了解,我需要手动创建 SQL 文件。

我已经创建了一个函数来从所有表中选择所有数据并创建 SQL 插入语句以插入到 SQL 文件中。

问题是我不知道如何将QByteArrayBLOB)数据插入到可以导入到另一个数据库的SQL语句中未来。

我正在使用 Qt 5.3。

注意:本题与this one有关。

【问题讨论】:

    标签: c++ database qt sqlite qbytearray


    【解决方案1】:

    我用过这段代码;

      QSqlQuery insertQuery(myDatabase);
    
      insertQuery.prepare("insert into images (name, data) values (:name, :data);");
    
      insertQuery.bindValue(":name",myImageName);
      insertQuery.bindValue(":data",*picture);
    
      insertQuery.exec();
    

    其中图片的类型为 QByteArray*。

    【讨论】:

      【解决方案2】:

      这并没有解决具体问题,但我放弃了创建SQL文件。 我使用byteArray.toHex() 命令生成SQL 文件仅用于测试目的,但它生成的SQL 文件比我的数据库文件(.db)大得多。

      例如,我的数据库文件有 174 mb,而生成的 SQL 文件有 331 mb。

      然后我放弃了创建 SQL 文件,我正在导出我的数据库文件 (.db) 的副本,然后在需要时将其导入系统。

      为此,我只需创建一个新连接并将此数据库文件中的所有内容复制到我当前的数据库文件中。

      正如我所说,这不是我问题的答案,而是我的一般问题的解决方法。

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 1970-01-01
        • 2010-12-09
        • 2010-12-15
        • 2014-04-07
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 2019-06-15
        相关资源
        最近更新 更多