如何使用 Qt 转储 SQLite 数据库表(使用 BLOB 类型)?
How can I dump SQLite database tables (that uses BLOB type) using Qt?
如何使用 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<double>
。
void Serialize::deserialize(QByteArray byteArray, QVector<double> *data)
{
QDataStream in(&byteArray, QIODevice::ReadOnly);
in >> *data;
}
如here所述,.dump
命令在sqlite命令行应用程序中实现,而不是在[=66中实现=]ite 库本身。然后,据我所知,我需要手动创建 SQL 文件。
我已经创建了一个函数来 select 所有表中的所有数据并创建 SQL 插入语句以插入 SQL 文件.
问题是我不知道如何将 QByteArray
(BLOB) 数据插入 SQL声明它可以在将来导入到另一个数据库中。
我正在使用 Qt 5.3。
注意:此问题与有关。
我用过这个代码;
QSqlQuery insertQuery(myDatabase);
insertQuery.prepare("insert into images (name, data) values (:name, :data);");
insertQuery.bindValue(":name",myImageName);
insertQuery.bindValue(":data",*picture);
insertQuery.exec();
其中图片类型为 QByteArray*。
这并没有解决具体问题,但我放弃了创建 SQL 文件。
我使用 byteArray.toHex()
命令生成 SQL 文件只是为了测试目的,但它生成了一个 SQL 文件比我的数据库文件 (.db) 大得多。
例如,我的数据库文件有 174 MB,而生成的 SQL 文件有 331 MB。
然后我放弃创建 SQL 文件,我正在导出数据库文件 (.db) 的副本,然后将其导入系统需要的时候。
为此,我只需创建一个新连接并将导出的该数据库文件中的所有内容复制到我当前的数据库文件中。
正如我所说,这不是我的问题的答案,而是我的一般问题的解决方法。
如何使用 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<double>
。
void Serialize::deserialize(QByteArray byteArray, QVector<double> *data)
{
QDataStream in(&byteArray, QIODevice::ReadOnly);
in >> *data;
}
如here所述,.dump
命令在sqlite命令行应用程序中实现,而不是在[=66中实现=]ite 库本身。然后,据我所知,我需要手动创建 SQL 文件。
我已经创建了一个函数来 select 所有表中的所有数据并创建 SQL 插入语句以插入 SQL 文件.
问题是我不知道如何将 QByteArray
(BLOB) 数据插入 SQL声明它可以在将来导入到另一个数据库中。
我正在使用 Qt 5.3。
注意:此问题与
我用过这个代码;
QSqlQuery insertQuery(myDatabase);
insertQuery.prepare("insert into images (name, data) values (:name, :data);");
insertQuery.bindValue(":name",myImageName);
insertQuery.bindValue(":data",*picture);
insertQuery.exec();
其中图片类型为 QByteArray*。
这并没有解决具体问题,但我放弃了创建 SQL 文件。
我使用 byteArray.toHex()
命令生成 SQL 文件只是为了测试目的,但它生成了一个 SQL 文件比我的数据库文件 (.db) 大得多。
例如,我的数据库文件有 174 MB,而生成的 SQL 文件有 331 MB。
然后我放弃创建 SQL 文件,我正在导出数据库文件 (.db) 的副本,然后将其导入系统需要的时候。
为此,我只需创建一个新连接并将导出的该数据库文件中的所有内容复制到我当前的数据库文件中。
正如我所说,这不是我的问题的答案,而是我的一般问题的解决方法。