一 SQLite简介
SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。Qt5以上版本可以直接使用SQLite(Qt自带驱动)。
二 使用SQLite需要的模块
我们新建一个工程叫test_SQLite ,并在工程文件中导入数据库模块,根据不同的构建器写入,博主新建项目时选择的是CMake,下面是两种构建器导入模块的写法,写完之后记得按CTRL+S保存:
CMake:
find_package(Qt6 COMPONENTS Sql REQUIRED)
target_link_libraries(test_QtConnectMySQL PRIVATE Qt6::Sql)
qmake:
QT += sql
三 SQLite实例代码
UI界面布局及对象名称:
SQLite整体使用起来是最方便的,直接上代码:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QSqlDatabase>
#include<QSqlError>
#include<QSqlQuery>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void showDriver();
private slots:
void linkDatabase(); //连接数据库
void closeDatabase();//关闭数据库
void insert(); //从数据库中新增数据
void del();//从数据库中删除数据
void update();//从数据库中修改数据
void showData(); //实时展示数据
private:
Ui::MainWindow *ui;
QSqlDatabase database;
QSqlQuery *sqlQuery;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "./ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
showDriver();
connect(ui->linkMySQL,SIGNAL(clicked(bool)),this,SLOT(linkDatabase()));
connect(ui->DisMySQL,SIGNAL(clicked(bool)),this,SLOT(closeDatabase()));
connect(ui->insert,SIGNAL(clicked(bool)),this,SLOT(insert()));
connect(ui->del,SIGNAL(clicked(bool)),this,SLOT(del()));
connect(ui->update,SIGNAL(clicked(bool)),this,SLOT(update()));
connect(ui->query,SIGNAL(clicked(bool)),this,SLOT(showData()));
}
MainWindow::~MainWindow()
{
delete ui;
closeDatabase(); //程序退出前关闭数据库
}
void MainWindow::showDriver()
{
QStringList list=database.drivers();
ui->showData->append("Qt支持的驱动有:");
for (int var = 0; var < list.length(); ++var) {
ui->showData->append(list[var]);
}
}
//连接数据库
void MainWindow::linkDatabase()
{
if (QSqlDatabase::contains("qt_sql_default_connection"))
{
database = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("my_database.db");
database.setUserName("root");
database.setPassword("123456");
}
if(database.open()){
ui->showData->append("连接SQLite成功: "+database.databaseName());
//当只有一个数据库时,我们需要把sqlQuery类与数据库进行绑定,不然会执行语句失败和导入驱动失败
sqlQuery=new QSqlQuery("my_database");
QString create_sql = "create table student (name varchar(30), age int,sex varchar(30));";
sqlQuery->prepare(create_sql);
if(!sqlQuery->exec())
ui->showData->append( "创建表失败:" + sqlQuery->lastError().text());
else
ui->showData->append( "表已创建!");
}else{
ui->showData->append("连接SQLite失败: "+database.lastError().text());
}
}
//关闭数据库
void MainWindow::closeDatabase()
{
if(database.isOpen()){
database.close();
ui->showData->append("数据库已经断开连接!");
}
}
//插入数据
void MainWindow::insert()
{
ui->showData->setText("");
QString name=ui->name->text().trimmed();
int age=ui->age->text().trimmed().toInt();
QString sex=ui->sex->text().trimmed();
//插入一条数据
QString sql=QString( "insert into student(name,age,sex) values('%1',%2,'%3');").arg(name).arg(age).arg(sex);
//判断是否执行成功
if(sqlQuery->exec(sql)){
ui->showData->append("插入数据数量:"+QString::number(sqlQuery->size()));
//遍历查询到的所有数据
while (sqlQuery->next()) {
QString name,age,sex;
name=sqlQuery->value("name").toString(); //姓名
age=QString::number(sqlQuery->value("age").toInt()); //年龄
sex=sqlQuery->value("sex").toString(); //性别
ui->showData->append("name:"+name+" "+"age:"+age+" "+"sex:"+sex);
}
}else {
ui->showData->append("插入数据失败"+sqlQuery->lastError().text());
}
}
//删除数据
void MainWindow::del()
{
ui->showData->setText("");
//QString name=ui->name->text().trimmed();
int age=ui->age->text().trimmed().toInt();
//QString sex=ui->sex->text().trimmed();
QString sql=QString("delete from student where age=%1;").arg(age);
//开始执行查询语句
if(sqlQuery->exec(sql)){
ui->showData->append("删除成功");
ui->showData->append("删除数据后的结果为:");
//遍历查询到的所有数据
while (sqlQuery->next()) {
QString name,age,sex;
name=sqlQuery->value("name").toString(); //姓名
age=QString::number(sqlQuery->value("age").toInt()); //年龄
sex=sqlQuery->value("sex").toString(); //性别
ui->showData->append("name:"+name+" "+"age:"+age+" "+"sex:"+sex);
}
}else{
ui->showData->append("删除数据失败:"+sqlQuery->lastError().text());
}
}
//修改数据
void MainWindow::update()
{
ui->showData->setText("");
QString name=ui->name->text().trimmed();
int age=ui->age->text().trimmed().toInt();
//QString sex=ui->sex->text().trimmed();
QString sql=QString("update student set name='%1' where age='%2';").arg(name).arg(age);
//开始执行查询语句
if(sqlQuery->exec(sql)){
ui->showData->append("修改成功");
ui->showData->append("修改数据后的结果为:");
//遍历查询到的所有数据
while (sqlQuery->next()) {
QString name,age,sex;
name=sqlQuery->value("name").toString(); //姓名
age=QString::number(sqlQuery->value("age").toInt()); //年龄
sex=sqlQuery->value("sex").toString(); //性别
ui->showData->append("name:"+name+" "+"age:"+age+" "+"sex:"+sex);
}
}else{
ui->showData->append("修改数据失败:"+sqlQuery->lastError().text());
}
}
//查询所有数据
void MainWindow::showData()
{
ui->showData->setText("");
QString sql=QString("select *from student;");
//开始执行查询语句
if(sqlQuery->exec(sql)){
ui->showData->append("查询成功");
ui->showData->append("查询数据结果为:");
//遍历查询到的所有数据
while (sqlQuery->next()) {
QString name,age,sex;
name=sqlQuery->value("name").toString(); //姓名
age=QString::number(sqlQuery->value("age").toInt()); //年龄
sex=sqlQuery->value("sex").toString(); //性别
ui->showData->append("name:"+name+" "+"age:"+age+" "+"sex:"+sex);
}
}else{
ui->showData->append("查询数据失败:"+sqlQuery->lastError().text());
}
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
运行效果:
下一篇文章:
Qt6教程之三(18) 使用SVN进行版本管理_折腾猿王申兵的博客-CSDN博客
上一篇文章: