问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

详细Qt创建并使用SQLite数据库教程(含实验实例)

创作时间:
作者:
@小白创作中心

详细Qt创建并使用SQLite数据库教程(含实验实例)

引用
CSDN
1.
https://blog.csdn.net/weixin_63577471/article/details/145492690

随着Qt和SQLite的结合使用日益普及,掌握如何在这两个平台上实现高效的数据管理和操作变得尤为重要。本文将详细介绍如何在Qt环境下创建并使用SQLite数据库,包括基本配置、数据库操作以及一个完整的实验项目。

一、SQLite是什么?

SQLite是一个轻量级、无服务器、配置自由且支持事务的SQL数据库引擎,非常适合嵌入式应用和桌面软件开发。Qt提供了对SQLite的良好支持,使得开发者能够方便地将数据库功能集成到应用程序中。

二、准备工作

1.配置Qt项目

首先,在.pro文件中添加SQL模块:

QT += core gui sql

2.引入头文件

接下来,在需要使用数据库功能的源文件中引入以下头文件:

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>

这些头文件提供了与数据库交互所需的类和函数。

三、创建SQLite数据库

1.基础连接

db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("compary.db");
//打开数据库
if(!db.open()){
    qDebug() << "open error" <<db.lastError();
}

这段代码尝试打开名为compary.db的数据库。如果该数据库不存在,则会自动创建一个新的数据库文件。

2.创建表格

QSqlQuery query;
QString sqlCreateTable = QString("create table staff(id integer primary key autoincrement,"
                                 "name varchar (20),"
                                 "address varchar (50),"
                                 "salary int);");
if(!query.exec(sqlCreateTable))
    qDebug() << "create table" <<db.lastError();

这里我们创建了一个staff表,包含三个字段:name、address和salary。

3.插入数据

4.查询数据

5.删除数据

6.更新数据

四、实验

1.设计ui显示界面

  • mainwindow.ui:主显示界面
  • itemform.ui:获取数据库词条

2.ui数据绑定

3.主ui控件槽函数处理

  • 添加按键:获取输入框的数据并写入到SQLite数据库中。
void MainWindow::on_add_clicked()
{
    // [1] 获取UI控件上的内容
    QString name = ui->nameEdit->text();
    QString address = ui->addrEdit->text();
    bool ok;
    int salary = ui->moneyEdit->text().toInt(&ok);
    if (!ok) {
        qDebug() << "Salary input is not a valid integer.";
        return;
    }
    // 使用QSqlQuery并进行参数绑定来避免SQL注入
    QSqlQuery query;
    QString sqlInsert = QString("INSERT INTO staff (name,address,salary) "
                                "VALUES (:name,:address, :salary)");
    // 绑定值到占位符
    query.prepare(sqlInsert);
    query.bindValue(":name", name);
    query.bindValue(":address", address);
    query.bindValue(":salary", salary);
    // 执行查询
    if (!query.exec()) {
        qDebug() << "Error inserting data:" << query.lastError().text();
    } else {
        qDebug() << "Data inserted successfully.";
    }
}
  • 更新按键
void MainWindow::on_uda_clicked()
{
    ui->listWidget->clear();
    QSqlQuery query;
    QString id = ui->IDEdit->text();
    QString address = ui->addrEdit->text();
    QString sqlUpdate = QString("update staff set address = '%1' where id = %2;")
                        .arg(address).arg(id.toInt());
    if (!query.exec(sqlUpdate)) {
        qDebug() << "Error update into data" << db.lastError();
    }
}
  • 删除按键
void MainWindow::on_del_clicked()
{
    QSqlQuery query;
    int id = ui->IDEdit->text().toInt();
    QString sqlDelete = QString("delete from staff where id = %1;")
                        .arg(id);
    if (!query.exec(sqlDelete)) {
        qDebug() << "Error delete into data" << db.lastError();
        // [2]同时,也要删除UI控件上的内容,下标是从零开始
        ui->listWidget->takeItem(id - 1);
    }
}
  • 查询按键
void MainWindow::on_sel_clicked()
{
    ui->listWidget->clear();
    QSqlQuery query;
    // [1] 向数据库下达查询数据的命令
    QString sqlSelect = "SELECT * FROM staff"; // 注意这里的SQL语句不需要分号结尾,且大小写应保持一致
    if (!query.exec(sqlSelect)) { // 确保使用正确的变量名,并将注释移到正确位置
        qDebug() << "Error selecting data" << db.lastError();
        return; // 如果查询失败,则返回,避免继续执行下面可能出错的代码
    }
    // [2] 遍历数据库记录
    while (query.next()) {
        int id = query.value("id").toInt();
        QString name = query.value("name").toString();
        QString address = query.value("address").toString();
        int salary = query.value("salary").toInt(); // salary 应该是整数类型,而不是 QString
        qDebug() << "id =" << id << ", name =" << name << ", address =" < <address << ", salary =" << salary;
        // [3]每遍历一条记录,就要更新到UI控件上
        // [3.1]创建一个列表条目
        itemform* staffitem = new itemform;
        staffitem->setStaffInfo(id, name, address, salary);
        QListWidgetItem* item = new QListWidgetItem;
        item->setSizeHint(QSize(574, 51)); // 设置item的大小提示,这样它就知道要为这个item分配多少空间。
        ui->listWidget->addItem(item); // 将item添加到QListWidget中。
        ui->listWidget->setItemWidget(item, staffitem); // 将自定义的QWidget(这里是staffitem)设置为item的显示内容。
    }
}

4.实验现象

可实时完成对数据库的增删改查操作。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号