基础概念:
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"); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)