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

Qt Sqlite内存数据库和文件数据库交互,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4685068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-07
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)

保存