Qt数据库(4)- 执行SQL语句

Qt数据库(4)- 执行SQL语句Qt助手关键字:Executing SQL Statements Qt Version 5.14.0 QSqlQuery类提供执行SQL语句的接口,并且能够访问执行结果数据集。 执行一次查询 想要执…

Qt数据库(4)- 执行SQL语句

Qt Version 5.14.0

QSqlQuery类提供执行SQL语句的接口,并且能够访问执行结果数据集。

执行一次查询

想要执行SQL语句,只需要创建一个QSqlQuery对象,然后调用它的exec函数,如下代码。(这里构造QSqlQuery对象时没有指定数据库链接名称)

QSqlQuery  query;
bool  flag  =  query.exec("SELECT  name,  salary  FROM  employee  WHERE  salary  >  50000");
if(false  ==  flag)
{
  qDebug()  <<  query.lastError();
}

代码100分

访问结果数据集

QSqlQuery提供的接口每次只能访问结果集中的一条记录,在执行完exec()函数后,QSqlQuery对象的内部指针位于结果集第一条数据之前,调用next()函数访问第一条结果集,然后再不断调用next()函数访问剩余所有数据,示例代码如下:

代码100分while (query.next()) {
 QString name = query.value(0).toString();
 int salary = query.value(1).toInt();
 qDebug() << name << salary;
 }

QSqlQuery::value()函数用于从一条记录中读取某个特定字段的数据。字段由索引指定(从0开始),value()函数的返回值是QVariant类型的,这个类型可以保存所有C++和Qt Core中定义的类型。不同数据库的数据类型会自动映射到Qt支持的对应类型,之后可以调用toInt()、toString()等函数将其转换为具体的数据。Qt具体支持的各个数据库的数据类型,详见Qt助手关键词: Data Types for Qt-supported Database Systems。

访问结果数据集可以使用的QSqlQuery接口有:

  • next()
  • previous()
  • first()
  • last()
  • seek()

当前位置的索引可以通过at()获取,结果集总行数使用size()函数获取(如果该数据库支持此接口)。

一个数据库驱动是否支持某个特性该如何判断,可以使用hasFeature()函数。

在你浏览结果集数据时,如果只使用next()和seek()函数,则可以在调用exec()之前,调用setForwardOnly(true)来提高效率。

插入、更新和删除

QSqlQuery::exec()可以执行任意SQL语句,如果你想一次插入很多条数据,可以使用占位符来提高效率(这样可以自动将各个数据类型转换为QString类型,简化SQL语句字符串的构建过程)。

Qt支持两种类型的占位符:名字绑定位置绑定

名字绑定示例代码如下:

 QSqlQuery query;
 query.prepare("INSERT INTO employee (id, name, salary) "
 		"VALUES (:id, :name, :salary)");
 query.bindValue(":id", 1001);
 query.bindValue(":name", "Thad Beaumont");
 query.bindValue(":salary", 65000);
 query.exec();

位置绑定示例代码如下:

代码100分 QSqlQuery query;
 query.prepare("INSERT INTO employee (id, name, salary) "
 "VALUES (?, ?, ?)");
 query.addBindValue(1001);
 query.addBindValue("Thad Beaumont");
 query.addBindValue(65000);
 query.exec();

Qt提供的所有数据库驱动都支持这两种绑定方式。如果数据库原生支持这种句法,Qt会直接将这个query传给DBMS,否则会对其进行预处理。实际执行的query可以调用executedQuery()来获得。

更新和删除类似。

事务

事务可以保证一个复杂的操作是原子的,即要么都执行,要么都不执行。 如果数据库支持事务,QSqlDriver::hasFeature(QSqlDriver::Transactions)会返回true。

使用事务的步骤如下:

  • 初始化事务( QSqlDatabase::transaction())
  • 执行query
  • 执行成功则提交事务(commit()),执行失败则回滚(rollback())

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10122.html

(0)
上一篇 2023-01-25
下一篇 2023-01-25

相关推荐

  • Python字符串转浮点数

    Python字符串转浮点数无论是在数据处理,还是在科学计算中,浮点数都是一个重要且基础的数据类型,而字符串则是另一种重要数据类型。

    2024-04-22
    68
  • mysql索引的理解_sql中的索引

    mysql索引的理解_sql中的索引前言 当提到MySQL数据库的时候,我们的脑海里会想起几个关键字:索引、事务、数据库锁等等,索引是MySQL的灵魂,是平时进行查询时的利器,也是面试中的重中之重。 可能你了解索引的底层是b+树,会加…

    2023-02-07
    174
  • Python中的w anchor用途及示例

    Python中的w anchor用途及示例在Python中,w anchor指的是Tkinter中的一个标签文字部件,常用于添加超链接和特定操作响应。w anchor可以在Tkinter窗口中添加文字,并且允许您在文本上单击并执行某些操作,其中包括启动特定的程序,访问特定网站等。它可以用于创建GUI界面中的按钮,设置超链接,甚至在创建具有文本交互的GUI界面时进行特定操作。

    2024-04-08
    68
  • Python安装教程

    Python安装教程随着人工智能技术的发展,Python已经成为最受欢迎的编程语言之一。Python语言简单易用,拥有丰富的库和工具,使得程序员可以快速地开发各种功能。本文将向大家介绍Python的安装方法,以便它们可以在自己的计算机上使用Python编程。

    2024-06-13
    58
  • 解读数仓中的数据对象及相关关系[通俗易懂]

    解读数仓中的数据对象及相关关系[通俗易懂]摘要:为实现不同的功能,GaussDB(DWS)提供了不同的数据对象类型,包括索引、行存表、列存表及其辅助表等。这些数据对象在特定的条件下实现不同的功能,为数据库的快速高效提供了保证,本文对部分数据对

    2023-06-18
    143
  • 数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;oracle ADG跨版本搭建;PG解决社保问题;mysqlbinlog解析……

    数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;oracle ADG跨版本搭建;PG解决社保问题;mysqlbinlog解析……摘要:墨天轮数据库周刊第31期发布啦,每周1次推送本周数据库相关热门资讯、精选文章、干货文档。 热门资讯 1、openGauss 正式开源,华为公开发布源代码【摘要】6月1日,华为正式宣布开源数据库能

    2023-03-19
    155
  • Python实现文件关闭功能

    Python实现文件关闭功能在计算机操作过程中,进程和文件是两个基本的概念。进程是正在执行的程序,而文件则是保存在计算机中的数据。在Python中,进程通常需要打开并操作文件,因此文件关闭非常重要。如果在Python程序中没有正确关闭文件,可能会导致内存泄漏,最终导致程序崩溃。

    2024-02-11
    98
  • Python实现元组转列表操作

    Python实现元组转列表操作Python是一种高级编程语言,拥有简洁易懂的语法结构,但是在不同的数据结构之间的转换有时依然令初学者感到棘手。本文将阐述Python中如何将元组(tuple)转化为列表(list)。

    2024-04-22
    58

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注