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

时间:2017-01-12 19:20:26

标签: c++ database qt sqlite qbytearray

如何使用 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 字段时,我使用deserialize函数再次获取QVector<double>

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

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

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

问题在于,我不知道如何将QByteArray BLOB )数据插入 SQL 语句中,以便将其导入将来会进入另一个数据库。

我使用的是Qt 5.3。

注意:此问题与this one

有关

2 个答案:

答案 0 :(得分:0)

我已使用此代码;

  QSqlQuery insertQuery(myDatabase);

  insertQuery.prepare("insert into images (name, data) values (:name, :data);");

  insertQuery.bindValue(":name",myImageName);
  insertQuery.bindValue(":data",*picture);

  insertQuery.exec();

其中图片的类型为QByteArray *。

答案 1 :(得分:0)

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

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

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

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

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