详细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.实验现象
可实时完成对数据库的增删改查操作。
热门推荐
癫痫患者如何科学管理生活?这6点帮助大
上海新房备案价查询指南及价格规定详解
一个你以为知道但多半不了解的问题:常吃的松子到底长在啥树上?
车超员处罚的标准是什么?这些标准如何确保交通安全?
小轿车出现超员情况应如何处理?怎样避免超员现象的发生?
胡桃木的基本属性
如何分辨胡桃木的真伪?胡桃木的鉴别方法与市场现状有何关联?
有效管理硬盘使用的技巧与方法,提升设备性能与节能效果
科普CMOS传感器的工作原理及特点
律师绩效提成管理办法怎么制定?
嘉陵江和长江,如何切割川东平行岭谷?
万人迷女星杨幂,为何她持续闪耀在娱乐圈
如何清理墙面上的双面胶?墙面处理注意事项全攻略
企业合同审核管理制度操作指南
贵阳小吃新趋势:探寻舌尖上的黔中风味
长时间步行引发的腹股沟疼痛有何缓解方法
克里米亚半岛:黑海北岸的地理明珠与政治焦点
怀孕期间可以养宠物吗?
达克宁含有激素吗
冬季农村道路交通安全知识全攻略
如何分析股票市场的联动现象?这种联动现象的影响因素有哪些?
AR882溶解痛风石最新研究结果将亮相 EULAR 2024年会
除夕年夜饭,推荐8菜1汤,适合5-6人,荤素搭配,好吃好做好寓意
从裁员困局到组织效能提升:数字化HR系统如何重构企业人才战略
发作起来很要命!避不开的产后腰疼要怎么预防和改善?
10个宝妈9个产后腰疼?来学学这4招!
没有边界感的关系,就是一场灾难
浅谈反渗透膜的支撑材料
以喜剧电影呈现现实,正确打开方式是什么
工作日志写作指南:从格式到范文的全面解析