Qt6教程之三(17) SQLite数据库使用

微软技术分享 微软全球最有价值专家
全栈领域优质创作者
博客专家认证
2024-02-22 14:33:22

一 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界面布局及对象名称:

https://img-blog.csdnimg.cn/8908dc3126564277be6acc1048178072.png

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();
}

运行效果:

https://img-blog.csdnimg.cn/a489e2ba1fba44f2bea77a819f80b820.png


文章来源: https://blog.csdn.net/XiaoWang_csdn/article/details/129825779
版权声明: 本文为博主原创文章,遵循CC 4.0 BY-SA 知识共享协议,转载请附上原文出处链接和本声明。


...全文
455 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,880

社区成员

发帖
与我相关
我的任务
社区描述
微软技术社区为中国的开发者们提供一个技术干货传播平台,传递微软全球的技术和产品最新动态,分享各大技术方向的学习资源,同时也涵盖针对不同行业和场景的实践案例,希望可以全方位地帮助你获取更多知识和技能。
windowsmicrosoft 企业社区
社区管理员
  • 王瑞MVP
  • 郑子铭
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

微软技术社区为中国的开发者们提供一个技术干货传播平台,传递微软全球的技术和产品最新动态,分享各大技术方向的学习资源,同时也涵盖针对不同行业和场景的实践案例,希望可以全方位地帮助你获取更多知识和技能。

予力众生,成就不凡!微软致力于用技术改变世界,助力企业实现数字化转型。

试试用AI创作助手写篇文章吧