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 <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的增删改查。