IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> sqlite附加数据库操作实例 -> 正文阅读

[大数据]sqlite附加数据库操作实例

实例功能

软件对某些数据库数据,需要进行自动备份功能,比如数据量达到15000条后,需要拷贝10000条数据到备份数据库后,再删除原数据库中被拷贝的数据。
其中涉及到备份数据库、原数据库两者之间的数据操作,所以需要用到数据库附加功能。

数据库附加实现

如下代码, 'db/Slide.db’为被附加的数据库相对路径,'pSlide’为附加后的数据库名称,可在运行附加sql语句的数据库中访问操作。

    queryRun(query,"ATTACH DATABASE 'db/Slide.db' as 'pSlide'");

附加之后还需要进行分离,执行如下代码:

	queryRun(query,"DETACH DATABASE 'pSlide'");

后面的使用代码如下:

queryRun(query,QString("create table Slide as select * from pSlide.Slide where SlideState = 2 order by RunTime ASC limit %1").arg(10000));

pSlide.Slide为附加数据库中的表格。

总体代码

void DataThread::taskAutoBackup()
{
    QTime time;
    time.start();

    qDebug()<<Q_FUNC_INFO<<"Start to backup(auto)... , mAutoBackupLimits : "<<mAutoBackupLimits<<"   mAutoBackups : "<<mAutoBackupNum;

    //创建备份文件夹: ./backups
    QDir buckupDir(QApplication::applicationDirPath());
    if(!buckupDir.cd("backups"))
    {
        if(!buckupDir.mkdir("backups"))
        {
            emit backupResult(false);
            return ;
        }
        buckupDir.cd("backups");
    }
    qDebug()<<Q_FUNC_INFO<<"Enter the backup dir:"<< buckupDir.absolutePath();

    //创建、打开备份数据库(注意初始化配置,如ID自增)
    QString timeStr = QDateTime::currentDateTime().toString("yyyyMMdd_hhmmss");
    QString dbName = "backup-" + timeStr + ".db";           //数据库名字
    QString dbAllName = buckupDir.path() + "/" + dbName;    //数据库全名(包含路径)

    QSqlDatabase backupDB = QSqlDatabase::addDatabase("QSQLITE");
    backupDB.setDatabaseName(dbAllName);
    if(!backupDB.open())
    {
        emit backupResult(false);
        return ;
    }
    qDebug()<<Q_FUNC_INFO<<"Open DB:"<< dbAllName;

    //=== 附加数据库
    QSqlQuery query(backupDB);
    queryRun(query,"ATTACH DATABASE 'db/Slide.db' as 'pSlide'");
    queryRun(query,"ATTACH DATABASE 'db/PatientCase.db' as 'pPatientCase'");               //PatientCase.db数据库
    queryRun(query,"ATTACH DATABASE 'db/DyeExpRecord.db' as 'pDyeExpRecord'");               //PatientCase.db数据库

    if(backupDB.transaction())
    {
        //复制Slide数据,并从附加数据库中 “条件” 拷贝内容
        queryRun(query,QString("create table Slide as select * from pSlide.Slide where SlideState = 2 order by RunTime ASC limit %1").arg(mAutoBackupNum));

        //“条件”删除附加数据库中拷贝的数据
        queryRun(query,QString("delete from pSlide.Slide "
                               "where ID in(select Slide.ID from pSlide.Slide where SlideState = 2 order by RunTime ASC limit %1)").arg(mAutoBackupNum));

        //复制 PatientCase , 选择方式:病例ID
        queryRun(query,QString("CREATE TABLE PatientCase AS SELECT * FROM pPatientCase.PatientCase "
                               "WHERE CaseID in(select Slide.CaseID from Slide)"));

        //复制DyExpRecord 实验信息 , 选择方式:实验编号+玻片ID
        queryRun(query,QString("CREATE TABLE DyeExpRecord AS SELECT * FROM pDyeExpRecord.DyeExpRecord "
                               "WHERE ExpNo in(select Slide.ExpNo from Slide) and SlideID in(select Slide.SlideID from Slide)"));
        if(!backupDB.commit())
        {
            backupDB.rollback();
            emit backupResult(false);
        }
        else
            emit backupResult(true);
    }
    else
        emit backupResult(false);

    //分离附加数据库
    queryRun(query,"DETACH DATABASE 'pSlide'");
    queryRun(query,"DETACH DATABASE 'pPatientCase'");
    queryRun(query,"DETACH DATABASE 'pDyeExpRecord'");
    backupDB.close();

    qDebug()<<Q_FUNC_INFO<<"Auto backup end! Usage Time:"<<time.elapsed()/1000.0<<"s";  //计时精度为ms级别
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:18:09  更:2022-04-04 12:22:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:22:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码