当前位置:首页 » 《随便一记》 » 正文

QT使用SQLite 超详细(增删改查、包括对大量数据快速存储和更新)

2 人参与  2024年03月07日 10:56  分类 : 《随便一记》  评论

点击全文阅读


QT+SQLite

在QT中使用sqlite数据库,有多种使用方法,在这里我只提供几种简单,代码简短的方法,包括一些特殊字符处理。在这里也给大家说明一下,如果你每次要存储的数据量很大,建议使用事务(代码中有体现),万条数据不到一秒吧。

用SQlite建立一个简单学生管理数据库

数据库中有两个表一个是classstudent

Alt

class表结构
Alt

student表结果
Alt

创建工程

我的工程如下:
Alt

直接上代码(看注释更通透)

student.pro文件添加sql模块。

QT       += core guiQT       += sql #添加数据库模块greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.# In order to do so, uncomment the following line.#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \    main.cpp \    Student.cppHEADERS += \    Student.hFORMS += \    Student.ui# Default rules for deployment.qnx: target.path = /tmp/$${TARGET}/binelse: unix:!android: target.path = /opt/$${TARGET}/bin!isEmpty(target.path): INSTALLS += target

student.h文件添加相关定义。

#ifndef STUDENT_H#define STUDENT_H#include <QWidget>#include <QSqlDatabase>#include <QSqlQuery>#include <QSqlError>#include <QSqlRecord>#include <QDebug>QT_BEGIN_NAMESPACEnamespace Ui { class Student; }QT_END_NAMESPACEclass Student : public QWidget{    Q_OBJECTpublic:    Student(QWidget *parent = nullptr);    ~Student();    //定义一个变量,用于增删改查    QString queryString;    void Add();//添加数据,不支持大量数据快速添加    void Delete();//删除数据,支持大量数据快速删除    void Update();//更新数据,若更新大量数据,可以先快速删除后在快速添加    void Select();//查询数据,支持大量数据快速查询    void FastAdd();//在sqlite中快速添加大量数据private:    Ui::Student *ui;    QSqlDatabase DB;//定义数据库名称};#endif // STUDENT_H

student.cpp文件编辑。(值得一提的是,在数据库删除操作中,有时候要判断限制条件是否为空,在代码中已体现)

#include "Student.h"#include "ui_Student.h"Student::Student(QWidget *parent)    : QWidget(parent)    , ui(new Ui::Student){    ui->setupUi(this);    //打开数据库    DB = QSqlDatabase::addDatabase("QSQLITE");    DB.setDatabaseName("./StudentDB.db");//打开数据库    if (DB.open())    {        qDebug() << "Database opened successfully!";    }    else    {        qDebug() << "无法打开数据库:" << DB.lastError().text();    }    Add();//添加数据    Select();//查询数据    Update();//更新数据    Delete();//删除数据        FastAdd();//对大量数据进行快速添加,尝试过添加几千条数据,不到一秒就添加完成}Student::~Student(){    delete ui;}void Student::Add()//增{    /*     * 在班级表中添加数据,       添加的数据为       班级名称:一班       班主任:李主任       班级人数:25    */    queryString = QString("insert into class(class_name, class_teacher ,student_number) values('%1','%2',%3) ")                           .arg("一班").arg("李主任").arg(25);    QSqlQuery query;//执行sql语句    if(query.exec(queryString)){        qDebug()<<"insert data Successful!";    }    else {        qDebug()<<"insert data Failed!";    }}void Student::Delete()//删{    //在这里有时候要判断限制条件是否为空,这时候可以用这个sql语句,当班级名称不为空时删除    //queryString = QString("delete from class where class_name is not null");    queryString = QString("delete from class where class_name = '%1'").arg("一班");    QSqlQuery query(queryString);    if(query.exec()){        qDebug()<<"Delete data Successful!";    }    else {        qDebug()<<"Delete data Failed!";    }}void Student::Update()//改{    //更新数据,将班级名称作为限制条件进行数据更新    queryString = QString("update class set class_teacher='%1' ,student_number=%2 where class_name='%3' ")                              .arg("张主任").arg(30).arg("一班");    QSqlQuery query;    if (query.exec(queryString))    {        qDebug()<<"updata data Successful!";    }    else    {        qDebug()<<"updata data Failed!";    }}void Student::Select()//查{    queryString = QString("select * from class where class_name = '%1'").arg("一班");    QSqlQuery query(queryString);    while(query.next()){        QString class_teacher = query.value("class_teacher").toString();        int student_number = query.value("student_number").toInt();        qDebug()<<"班主任:"<<class_teacher;        qDebug()<<"班级人数:"<<student_number;    }}void Student::FastAdd()//对大量数据进行快速添加,尝试过添加几千条数据,不到一秒就添加完成{    //使用事务    DB.transaction();//开启事务    QSqlQuery query;    query.prepare("INSERT INTO class (class_name, class_teacher, student_number) VALUES (?, ?, ?)");    for (int i = 0; i < 100; ++i) {        query.bindValue(0, "二班");        query.bindValue(1, "张三");        query.bindValue(2, i);        query.exec();    }    DB.commit();//一次性提交,省去大量时间}

运行完之后都出现successful,就说明,你已经掌握了qt+sqlite的增删改查。
在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/75208.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1