基础概念:
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");
}