最近在做qt项目的时候要用到数据库的备份功能,经过自己整理步骤如下:
1、备份,只是把指定的db文件进行copy一份就好。 如果备份成功后要查询备份的数据信息,直接用QFileInfo qFileInfo(backupsFile),再调用qFile的一些相关信息即可查询。
QString dirName = QDir::currentPath();
if(!dirName.isEmpty()){
QString backupsFile = QDateTime::currentDateTime().toString("yyyyMMddhhmmss") + ".bak";
bool result = QFile::copy(DEFAULT_DATABASE_DIR, dirName + "/" + backupsFile);
if(!result){
//备份失败
}
}
2、删除备份数据,在备份数据没有被打开的时候直接调用如下逻辑即可。
QFile qFile(qFileInfo.absoluteFilePath());
if(qFile.exists()){
bool result = qFile.remove();
if(result){
//删除成功
}else{
//删除失败
}
}
3、恢复数据库,恢复数据库采用的方法比较粗暴,直接删除原来的数据库,然后把原来备份的数据库拷贝过来即可,在删除的时候需要先调用QSqlDatabase.close() 不然删不掉,删除完成后再拷贝,拷贝完成后QSqlDatabase.open(),最后再加上重启应用。
//获取备份的文件 qFile
QFile qFile(qFileInfo.absoluteFilePath());
if(qFile.exists()){
//关闭QSqlDatabase.close()
DBManager* manager = DBManager::getInstance();
manager->m_db.close();
//拿到最初的数据库
QFile qFile(DEFAULT_DATABASE_DIR);
if(qFile.exists()){
//删除原来的数据库
bool result = qFile.remove();
if(!result){
//删除失败
}
}
//拷贝备份文件到原来文件, 注意文件名要与原来保持一致
bool result = QFile::copy(qFileInfo.absoluteFilePath(), DEFAULT_DATABASE_DIR);
if(!result){
//恢复失败
}else{
//恢复成功
}
//这里打开db
manager->m_db.open();
//重启应用程序
qApp->exit(MainWindow::EXIT_CODE_REBOOT);
}
4、重启 main页面 main方法代码如下
int e;
do{
QApplication a(argc, argv);
MainWindow Main;
Main.show();
e = a.exec();
} while(e == MainWindow::EXIT_CODE_REBOOT);//备份数据恢复后重启程序
return e;