栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

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

基础概念:

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");
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/342522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号