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

QT+SQLite

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

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

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

Alt

class表结构
Alt

student表结果
Alt

创建工程

我的工程如下:
Alt

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

student.pro文件添加sql模块。

QT       += core gui
QT       += sql #添加数据库模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += 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.0

SOURCES += \
    main.cpp \
    Student.cpp

HEADERS += \
    Student.h

FORMS += \
    Student.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: 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_NAMESPACE
namespace Ui { class Student; }
QT_END_NAMESPACE

class Student : public QWidget
{
    Q_OBJECT

public:
    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的增删改查。
在这里插入图片描述

  • 20
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Qt 是一个跨平台的 C++ 应用程序开发框架,它可以帮助开发人员快速地开发出高质量、可维护的应用程序。Qt 也提供了对 SQLite 数据库的支持,这使得开发人员可以使用 Qt 框架轻松地与 SQLite 数据库进行交互。 Qt 提供了一个名为 QSqlDatabase 的类,它可以用于连接和管理 SQLite 数据库。开发人员可以使用 QSqlQuery 类执行 SQL 查询操作,并使用 QSqlTableModel 类将查询结果显示在 Qt 的表格控件中。 以下是一个使用 QtSQLite 数据库的示例代码: ```cpp #include <QtSql> int main() { // 创建 SQLite 数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); // 打开数据库 if (!db.open()) { qWarning() << "Failed to open database!"; return 1; } // 创建一个表 QSqlQuery query; query.exec("CREATE TABLE person (id INTEGER PRIMARY KEY, name VARCHAR(30), age INTEGER)"); // 插入数据 query.prepare("INSERT INTO person (name, age) VALUES (:name, :age)"); query.bindValue(":name", "John Doe"); query.bindValue(":age", 30); query.exec(); // 查询数据 QSqlTableModel model; model.setTable("person"); model.select(); // 显示查询结果 QTableView view; view.setModel(&model); view.show(); return 0; } ``` 以上示例代码演示了如何使用 QtSQLite 数据库创建一个人员信息表,并将查询结果显示在 Qt 的表格控件中。开发人员可以根据自己的需求修改代码,实现更复杂的功能。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值