Qt SQLite数据库的 备份、恢复、删除功能。

最近在做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;

猜你喜欢

转载自blog.csdn.net/fl2502923/article/details/105843342