当前位置: 首页 > news >正文

【Qt之数据库操作】

使用Qt实现SQLite数据库操作可以分为以下几个步骤:

  1. 添加SQLite头文件和库文件:

在Qt项目中,需要在.pro文件中添加以下内容:

QT += sql
  1. 打开/创建数据库:

可以使用QSqlDatabase类中的静态函数addDatabase()来添加数据库驱动,例如:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
if(!db.open()){qDebug() << "Can't open the database!" << endl;exit(0);
}

示例创建了一个QSqlDatabase对象db,并使用静态函数addDatabase()添加了SQLite数据库驱动。然后使用setDatabaseName()函数设置数据库文件名,最后使用open()函数打开数据库,如果打开失败,则会输出一行错误信息。

  1. 创建表:

创建表需要使用QSqlQuery类,例如:

QSqlQuery query;
query.exec("create table student(id int primary key, name varchar)");

示例创建了一个QSqlQuery对象query,然后使用exec()函数执行了创建表的SQL语句。

  1. 插入数据:

插入数据也需要使用QSqlQuery类,例如:

QSqlQuery query;
query.exec("insert into student(id, name) values(1, 'Tom')");

示例创建了一个QSqlQuery对象query,然后使用exec()函数执行了插入数据的SQL语句。

  1. 查询数据:

查询数据需要先使用QSqlQuery类查询数据,然后使用·QSqlRecord类·获取数据。例如:

QSqlQuery query("select * from student");
QSqlRecord rec = query.record();
int id = rec.indexOf("id");
int name = rec.indexOf("name");while (query.next()) {int idValue = query.value(id).toInt();QString nameValue = query.value(name).toString();qDebug() << idValue << nameValue << endl;
}

示例创建了一个QSqlQuery对象query,并使用它查询了student表中的所有数据。
然后获取了查询结果的结构体rec,并使用indexOf()函数获取了id和name两列的索引。
接着使用next()函数遍历查询结果,并使用value()函数获取对应列的值。

  1. 更新数据:

更新数据需要使用QSqlQuery类,例如:

QSqlQuery query;
query.exec("update student set name='John' where id=1");

示例创建了一个QSqlQuery对象query,之后使用exec()函数执行了更新数据的SQL语句。

  1. 删除数据:

删除数据需要使用QSqlQuery类,例如:

QSqlQuery query;
query.exec("delete from student where id=1");

示例创建了一个QSqlQuery对象query,然后使用exec()函数执行了删除数据的SQL语句。

  1. 事务处理:

在Qt中,事务处理需要使用QSqlDatabase类的transaction()commit()函数,例如:

QSqlDatabase::database().transaction();
QSqlQuery query;
query.exec("update student set name='John' where id=1");
query.exec("update student set name='Mike' where id=2");
QSqlDatabase::database().commit();

示例通过QSqlDatabase类获取了打开的数据库,并使用transaction()函数开始一个事务。然后使用QSqlQuery类执行了两条更新数据的SQL语句。最后使用commit()函数提交事务,如果在执行事务期间发生了错误,可以使用rollback()函数回滚事务。

http://www.lryc.cn/news/221707.html

相关文章:

  • 数据结构(c语言版) 队列
  • kimera论文阅读
  • golang gorm通过泛型实现通用单表增删改
  • 十、K8S之ConfigMap
  • python飞书群机器人通过webhook发送消息
  • 埃隆·马斯克的 AI 聊天机器人 Grok 已经上线
  • 【代码随想录】算法训练营 第十五天 第六章 二叉树 Part 2
  • 使用ssl_certificate_by_lua指令动态加载证书
  • Qt中Opencv转Qimage出现重影或者颜色不对
  • upload-labs-1
  • 【vite配置路径别名@】/启动配置
  • 3. List
  • Django初窥门径-oauth登录认证
  • 数学到底在哪里支撑着编程?
  • Python模块ADB的, 已经 pyadb
  • 猫头虎分享从Python到JavaScript传参数:多面手的数据传递术
  • 注解汇总:Spring 常用的注解
  • 合肥工业大学操作系统实验5
  • 基于SpringBoot+Vue的点餐管理系统
  • C# 继承,抽象,接口,泛型约束,扩展方法
  • mysql的备份和恢复
  • 【机器学习3】有监督学习经典分类算法
  • lv11 嵌入式开发 计算机硬件基础 1
  • 【Linux】vim
  • cstring函数
  • 【owt】p2p client mfc 工程梳理
  • pandas教程:Hierarchical Indexing 分层索引、排序和统计
  • Redis 扩展 RedisBloom 插件,解决缓存击穿、穿透
  • VBA技术资料MF80:选择文件及文件夹
  • 网络层:控制平面