Qt中SQLite数据库的使用

发布于:2025-02-11 ⋅ 阅读:(53) ⋅ 点赞:(0)

sqlite的配置

        SQLite是一个轻量级的嵌入式数据库,不需要单独的数据库服务器,完全使用本地文件来存储数据。当在Qt中使用SQLite数据库时,需要涉及到一些SQL语句以及Qt中的相关函数。

        本文在Qt6的环境下使用sqlite数据库,基于cmake构建工程。

        使用Qt Widgets Application的方式新建工程,在CMakeLists.txt中添加sql相关的模块:

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)

target_link_libraries(Test02_MySqlDemo PRIVATE Qt6::Widgets Qt6::Sql)

数据库操作

1.连接到数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db");
if(!db.open()) {
    qDebug() << "无法连接到数据库";
    return;
}
2.创建表:CREATE TABLE
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");

使用exec()函数执行SQL语句,创建了一个名为users的表,包含id、name和age三个列。

3. 插入数据:INSERT
QString name = "Alice";
int age = 25;
QSqlQuery query;
query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
query.bindValue(":name", name);
query.bindValue(":age", age);
if(!query.exec()) {
    qDebug() << "插入数据失败:" << query.lastError().text();
}

当需要在表中插入新的数据时,可以使用SQL的INSERT INTO语句。在Qt中,可以使用QSqlQuery对象的prepare()和bindValue()函数来执行预处理插入语句。

query.prepare()

在Qt中,query.prepare()方法用于准备要执行的SQL语句。它的主要作用是将SQL语句中的参数部分用占位符(如:variable)代替,从而形成一个预处理的SQL语句。

query.bindValue()

在调用了query.prepare()方法准备好了SQL语句后,接下来使用query.bindValue()方法为每个占位符绑定具体的数值。这个方法的作用是设置预处理语句中的占位符的值,从而将真实的数据插入到SQL语句中。

4.查询数据:SELECT
QSqlQuery query;
query.exec("SELECT * FROM users");
while(query.next()) {
    int id = query.value(0).toInt();
    QString name = query.value(1).toString();
    int age = query.value(2).toInt();
    qDebug() << "ID:" << id << " Name:" << name << " Age:" << age;
}

query.next()

在Qt中,query.next()方法用于遍历查询结果集中的下一行数据。当执行SELECT查询语句并通过exec()方法获取结果集后,可以使用query.next()方法逐行访问查询结果中的数据。每次调用query.next()方法,会将查询结果集中的指针移到下一行数据。如果存在下一行数据,则该方法返回true,并允许获取下一行数据;如果不存在下一行数据,则返回false,表示已经遍历完所有结果。

5.更新数据:UPDATE
QSqlQuery query;
query.prepare("UPDATE student SET name = :newName WHERE id = :id");
query.bindValue(":newName", "New Name"); // 设置要更新的新名称
query.bindValue(":id", 1); // 设置要更新的记录的 ID
if (query.exec()) {
   qDebug() << "Update successful";
} else {
   qDebug() << "Update failed:" << query.lastError().text();
}
6.删除指定数据
QSqlQuery query;
query.prepare("DELETE FROM your_table WHERE condition = :condition");  // 设置删除语句
query.bindValue(":condition", value);  // 绑定条件值
bool success = query.exec();  // 执行删除操作
if(success) {
    // 删除成功
} else {
    // 删除失败,处理错误
    qDebug() << "Error:" << query.lastError().text();
}

Qt中新建一个qwidget的工程,修改mainwindow.cpp里面的内容如下,测试sql的语句:

#include "mainwindow.h"
#include "./ui_mainwindow.h"

#include <QSqlDatabase>
#include <QSqlTableModel>
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlRecord>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("MyDataBase.db");
    if(!db.open()) {
        qDebug() << "无法连接到数据库";
        return;
    }

    //创建表
    QSqlQuery query;
    query.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");

    //插入语句
    QString name = "Alice";
    int age = 25;
    query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
    query.bindValue(":name", name);
    query.bindValue(":age", age);
    if(!query.exec()) {
        qDebug() << "插入数据失败:" << query.lastError().text();
    }

    //执行UPDATE操作
    query.clear();
    query.prepare("UPDATE users SET name =:name, age = :age WHERE id =:id");
    query.bindValue(":name", "zhangsan");
    query.bindValue(":age", 41);
    query.bindValue(":id", 2);
    if (query.exec()) {
        qDebug() << "Update successful";
    } else {
        qDebug() << "Update failed:" << query.lastError().text();
    }

    //删除语句
    query.clear();
    query.prepare("DELETE FROM users WHERE id = :id");  // 设置删除语句
    query.bindValue(":id", 1);  // 绑定条件值
    bool success = query.exec();  // 执行删除操作
    if(success) {
        qDebug() << "Delete successful";
    } else {
        qDebug() << "Delete failed:" << query.lastError().text();
    }

    // 查询数据库
    query.exec("SELECT * FROM users");
    while(query.next()) {
        int id = query.value(0).toInt();
        QString name = query.value(1).toString();
        int age = query.value(2).toInt();
        qDebug() << "ID:" << id << " Name:" << name << " Age:" << age;
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

SQLite可视化软件

sqlite的数据会写入到db的文件中,若想可视化查看数据内容,可借助第三方工具,本文中使用SQLite Browser的工具。

下载地址:DB Browser for SQLite

 

 下载之后,解压到本地,打开DB Browser for SQLite.exe,然后点击打开数据库,选在刚才保存到本地的db文件,即可查看里面的内容。

 也可以在Qt Creator中添加该第三方的工具,更加方便的查看该数据库,工具-外部-配置,

 配置好后的效果如下:

 参考博客:

Qt使用sqlite数据库及项目实战_qt sqlite-CSDN博客

 QT配置外部工具之SQLite Browser_sqlitebrowser-CSDN博客


网站公告

今日签到

点亮在社区的每一天
去签到