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

#include

#include

#include

#include

#include

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()<<"班主任:"<

qDebug()<<"班级人数:"<

}

}

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

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: