详细Qt创建并使用SQLite数据库教程(含实验实例)
创作时间:
作者:
@小白创作中心
详细Qt创建并使用SQLite数据库教程(含实验实例)
引用
CSDN
1.
https://blog.csdn.net/weixin_63577471/article/details/145492690
前言
随着 Qt 和 SQLite 的结合使用日益普及,掌握如何在这两个平台上实现高效的数据管理和操作变得尤为重要。然而,对于许多初学者来说,将两者结合起来并应用于实际项目中可能会遇到一些挑战。从设置正确的项目配置到编写无误的 SQL 查询,再到确保数据的安全性和完整性,每一个步骤都需要仔细考虑和实践。本文介绍如何在 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.实验现象
可实时完成对数据库的增删改查操作。
5.源码下载
我的gitte代码仓库Sqlite_demo2
热门推荐
智能系统提升刺猬养殖效率,环境监测健康管理一体化
脑出血后血压飙升,如何紧急处理?
白头发的成因与预防:5种食物助你延缓白发生成
智能电表装上“火眼金睛”,偷电行为无所遁形
“喜鹊闹梅”形态:捕捉涨停机会还是主力出货陷阱?
反对捐官、整顿吏治,黄德濂以忠诚勤廉著称
48岁林心如成为金钟奖最大赢家,制片《有生之年》荣获六项大奖
改善生活习惯,告别嗓子干有白痰
快速掌握英语数字单词,告别点餐尴尬
MicroLED全彩色微显示技术研究进展
“超级月亮”爬上来!中秋新疆最佳赏月时刻表
星斗大森林探秘:绝世唐门的秘密
上海市宝山区:科学教育的创新实践与成效
贝多芬 C小调第七小提琴奏鸣曲
波普尔:从巴赫与贝多芬到艺术的客观主义
楼道“微自治”,“撬动”这个社区治理新活力
冰片治耳鸣耳聋吗
腊八蒜腌制指南:紫皮蒜配粮食醋,0-10℃是关键
专业摄影指南:钱塘江三大观潮点及拍摄技巧详解
录屏功能怎么打开?轻松开启全平台录屏功能全攻略
唐诗里的长安:西安打造“唐诗之都”正当时
破军是铠的最强装备,两种出装方案助你所向披靡
张红甫教你做无油版可乐鸡翅:健康美味的新选择
冬季吹风头痛的中医解决方案:保暖是关键
中国春节成功申遗,成第44项世界级非遗
二陈丸:中老年人健康管理的得力助手
从额亦都到和珅:钮祜禄氏家族的兴衰传奇
冬季运动指南:5大运动项目与7项安全须知
长柄刷子配专用清洁剂,淘宝让水桶清洗不再难
霍去病漠北战役指挥才能揭秘