Qt Sqlite内存数据库和文件数据库交互

1 篇文章 0 订阅

基础概念:

1、内存数据库标识":memory:";

2、[]中内容表示可选;

3、采用QSqlDatabase实现Sqlite的内存数据库和文件数据库交互。

一、将文件数据库加载到内存数据库(示例见第三节)

        1、打开文件数据库获取所有的表名,[关闭文件数据库];

        2、打开内存数据库,将文件数据库附加到内存数据库;

        3、通过文件数据库表创建内存数据库表;

        4、解除文件数据库附加到内存数据库。

二、将内存数据库保存到文件数据库(指新建文件数据库)(示例见第三四节)

        1、打开新的文件数据库;

        2、准备好内存数据库,获取内存数据库所有表名;

        3、将文件数据库附加到内存数据库(注:此步骤依然是文件数据库附加到内存数据库);

        4、通过内存数据库表创建文件数据库表;

        5、解除文件数据库附加到内存数据库,[关闭文件数据库]。

三、文件数据库加载到内存数据库源码

void filedb2memdb(){
    QSqlDatabase diskdb = QSqlDatabase::addDatabase("QSQLITE", "DISK");
    diskdb.setDatabaseName("a.db");
    diskdb.open();
    QStringList tables = diskdb.tables();
    diskdb.close();
    QSqlDatabase::removeDatabase("DISK");

    QSqlDatabase memdb = QSqlDatabase::addDatabase("QSQLITE", "MEMORY");
    memdb.setDatabaseName(":memory:");
    memdb.open();

    QSqlQuery query(memdb);
    query.exec(QString("attach database '%1' as srcdb;").arg("a.db"));

    for each(QString name in tables){
        QString sql = QString("create table %1 as select * from srcdb.%2;").arg(name).arg(name);
        query.exec(sql);
    }
    query.exec("detach database srcdb;");
}

四、内存数据库保存到文件数据库源码

void memdb2filedb(){
    QSqlDatabase outdb = QSqlDatabase::addDatabase("QSQLITE", "DISK");
    diskdb.setDatabaseName("b.db");
    diskdb.open();

    QStringList tables = memdb.tables(); // 假设内存数据完整:memdb表示内存数据QSqlDatabase类型

    QSqlQuery query(memdb);
    query.exec(QString("attach database 'b.db' as desdb;"));

    for each(QString name in tables){
        QString sql = QString("create table desdb.%1 as select * from %2;").arg(name).arg(name);
        query.exec(sql);
    }
    query.exec("detach database desdb;");

    diskdb.close();
    QSqlDatabase::removeDatabase("DISK");
}

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值