QT+SQLite
在QT中使用sqlite数据库,有多种使用方法,在这里我只提供几种简单,代码简短的方法,包括一些特殊字符处理。在这里也给大家说明一下,如果你每次要存储的数据量很大,建议使用事务(代码中有体现),万条数据不到一秒吧。
用SQlite建立一个简单学生管理数据库
数据库中有两个表一个是class和student。
class表结构
student表结果
创建工程
我的工程如下:
直接上代码(看注释更通透)
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的增删改查。