小工具知识网

当前位置: 首页 > 行业知识 > QT使用SQLite 超详细(增删改查、包括对大量数据快速存储和更新)

行业知识

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

2026-11-05 03:57:43 来源:互联网转载

QT+SQLite

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

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

数据库中有两个表一个是class和student。

class表结构

student表结果

创建工程

我的工程如下:

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

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 #include #include #include #include #include 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()         qDebug()     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()        qDebug()    //在这里有时候要判断限制条件是否为空,这时候可以用这个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()        qDebug()    //更新数据,将班级名称作为限制条件进行数据更新    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()        qDebug()    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()    //使用事务    DB.transaction();//开启事务    QSqlQuery query;    query.prepare("INSERT INTO class (class_name, class_teacher, student_number) VALUES (?, ?, ?)");    for (int i = 0; i 

上一篇:宝塔面板新手教程,快速上手,轻松管理一步到位!

下一篇:怎么让div垂直居中?