文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2021-08-24 20:58

关注

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();
}

访问结果数据集

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

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接口有:

当前位置的索引可以通过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();

位置绑定示例代码如下:

 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。

使用事务的步骤如下:

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯