Qt类翻译-QSqlQueryClass

4 篇文章 0 订阅

QSqlQuery类提供了一种执行和操纵SQL语句的方法

详细描述

QSqlQuery 封装了SQL的创建,查询和检索数据的语句,可以代替QSqlDatabase,这样可以代替DML(数据操作语言),比如SELECT, INSERT, UPDATE, DELETE,对于DDL(数据定义语言),比如 CREATE TABLE,这样在不是标准的SQL可以用来代替数据定义定义语言。
当成功的执行了SQL语句后,将会设置查询的状态为激活,然后这个查询的状态函数isActive()将返回true,要不然这个查询的状态将会设置为非激活状态,换句话说,当执行了新的SQL语句,这个查询会是一个无效的结果,一个激活的查询一定会返回一个有效的结果,(这样的话 isVaild()函数将会返回true)在结果可以被提取之前
对于一些数据库,如果一个激活的查询是一个SElECT语句,当你调用commit()和rollback()函数的时候,将会返回FALSE,详细的内容可以看isActive()函数
使用如下函数来执行导向的值

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

这些函数允许程序员向前移动,向后退,或者通过查询返回的结果来回变化,如果你仅仅是希望结果一直往前进(比如通过使用next()函数),你可以使用setForwardOnly()函数,这样可以省掉很多空间和提高数据库的运行速度,一旦激活的查询返回的是一个无效的结果,数据局可以被value()函数恢复,所有的数据将会使用QVariants的方式从SQL中返回
比如

QSqlQuery query("SELECT country FROM artist");
while (query.next()) (
	QString country = query.value(0).toString();
	dosomething(country);
)

为了访问查询返回的结果,使用value(int).SELECT返回的数据中对的每一个部分,从0开始,建议不要使用SELECT *的语句,因为这个语句的返回值是模糊的
从效率对的目的上来看,有两种方式可以通过名称来访问数据场,为了将场的名称转换为索引,我们使用recod().indexOf(),举个例子

QSqlQuery query("SELECT * FROM artiset")
int fileIdNo = query.record().indexOf("country");
while (query.next()) {
	QString country = query.value(fieldNo).toString();
	doSomething(country);
}

QSqlQuery 支持预备查询的方式,参数的绑定是通过占位符的方式绑定的,一些数据库不支持这个功能,所以对于这些功能,Qt对其进行了模拟,举个例子,Qracle 和 ODBC 的驱动支持预备查询的指令,Qt可以使用他们,但是对于不支持这个功能的数据库,Qt模拟了这些功能,比如在查询执行的过程中,通过使用真实对的数值来代替占位符,使用numRowsAffected()函数来找到non-SELECT查询的中受影响的行数,使用size()函数来找到有多少的数据被SELECT语句找到
举几个例子:

使用占位符来绑定数据
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname)"
	"VALUES (:id, :forename, :surname)");
query.bindValue(":id", 100");
      query.bindValue(":forename", "Bart");
      query.bindValue(":surname", "Simpson");
      query.exec();
使用空位来绑定数据
      QSqlQuery query;
      query.prepare("INSERT INTO person (id, forename, surname) "
                    "VALUES (:id, :forename, :surname)");
      query.bindValue(0, 1001);
      query.bindValue(1, "Bart");
      query.bindValue(2, "Simpson");
      query.exec();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值