本文共 1789 字,大约阅读时间需要 5 分钟。
QSqlQuery 是一个功能强大的类,能够执行任何 SQL 语句,包括 SELECT、INSERT、UPDATE、DELETE 等。它是进行数据库操作的多功能工具,能够通过运行 SQL 语句实现数据表的创建、修改以及批量数据操作。对于 SELECT 语句,QSqlQuery 可以返回查询结果的数据集,但不能作为模型或视图结构中的数据模型。与 QSqlTableModel 和 QSqlQueryModel 相比,QSqlQuery 更适合执行基于记录的操作,如数据浏览和修改,而它通过运行 SQL 语句实现了对数据的批量修改。
QSqlQuery 提供了多种构造函数,允许在创建对象时传递 SQL 语句和数据库连接参数:
QSqlQuery(const QSqlDatabase &db)
使用默认数据库连接,不设置 SQL 语句。QSqlQuery(const QString &query = QString(), const QSqlDatabase &db = QSqlDatabase())
可以传递 SQL 语句和数据库连接。如果不传递任何参数,则使用默认 SQL 语句和数据库连接。exec(QString) 接口函数可以直接通过 exec() 方法运行 SQL 语句:
QSqlQuery query;query.exec("SELECT * FROM employee");// 更新数据query.exec("UPDATE employee SET Salary=6000 where Gender='女'"); 对于动态生成的 SQL 语句,可以使用 prepare() 方法设置带参数的 SQL 语句,然后通过 bindValue() 方法设置参数值,再调用 exec() 运行语句。bindValue() 提供了两种形式:
第一种形式:通过占位符名称设置参数值:
QSqlQuery query;query.prepare("SELECT empNo, Name, Gender, Salary FROM employee WHERE Gender =:sex AND Salary >:=salary");query.bindValue(":sex", "男");query.bindValue(":salary", 5000);query.exec(); 第二种形式:通过参数位置序号设置值:
QSqlQuery query;query.prepare("UPDATE employee SET Department=?, Salary=? WHERE EmpNo =?");query.bindValue(0, "技术部");query.bindValue(1, 6000);query.bindValue(2, 1007);query.exec(); 另外,还可以使用 addBindValue() 方法按顺序添加参数值,无需指定位置序号:
QSqlQuery query;query.prepare("UPDATE employee SET Department=?, Salary=? WHERE EmpNo =?");query.addBindValue("技术部");query.addBindValue(6000);query.addBindValue(1007);query.exec(); 如果 QSqlQuery 运行的是 SELECT 语句,会返回一个数据集,并提供当前行的操作接口。可以通过 first()、previous()、next()、last() 等方法移动当前行位置。record() 方法可以获取当前记录的数据:
QSqlRecord record = query.record();
seek() 方法可以定位到指定序号的记录:
bool result = query.seek(5, false); // 绝对位置移动到第 5 行
relative 参数表示移动方向(false 为绝对位置,true 为相对位置)。
转载地址:http://lcxfk.baihongyu.com/