QT数据库操作QSqlQuery
来源:互联网 发布:优化网站的文件和资源 编辑:程序博客网 时间:2024/04/25 19:55
数据库对大多数应用来说,大概是必备吧。如何对数据库进行增删改查等操作也许就是关键了。在QT中如何对数据库进行这些操作呢?QSqlQuery类可以完成!如何使用它呢?看下面吧!(对数据库操作前需要先连接数据库,连接数据库请先查看数据库连接)
QSqlQuery
QSqlQuery支持DML(data manipulation language)语法,如:SELECT, INSERT,UPDATE and DELETE
;也支持DDL(data definition language)语法,如:CREATE TABLE
;还支持非标准的特点数据库命令,如:SET DATESTYLE=ISO
for PostgreSQL。
注意:在QSqlQuery对象创建前,打开数据库,且保持其打开状态,否则将出现未定义行为。
执行操作
bool QSqlQuery::exec()bool QSqlQuery::exec(const QString & query)
执行数据库操作,将重置lastError()
,并将使isActive()
返回true
,直到其完成操作。
第一个函数使用前序使用bool QSqlQuery::prepare(const QString & query)
准备操作语句,第二个函数则直接使用操作语句。
//方式一:QSqlQuery query;query.prepare("INSERT INTO person (id, forename, surname) " "VALUES (:id, :forename, :surname)");query.bindValue(":id", 1001);query.bindValue(":forename", "Bart");query.bindValue(":surname", "Simpson");query.exec(); //方式二:QSqlQuery query;query.exec("INSERT INTO employee (id, name, salary) " "VALUES (1001, 'Thad Beaumont', 65000)");
注意:
- 当QSQLDatabase使用了连接名,即如
addDatabase("QMYSQL","connName")
时,需使用构造函数QSqlQuery(QSqlDatabase db)
。- 一些数据库会延迟
prepare()
直到调用exec()
,这将导致不能正确执行。- 在SQLite中,同时执行超过一条语句将导致函数返回false。
结束操作
void QSqlQuery::finish()
该函数通常无需调用,除非同一QSqlQuery对象间隔一段时间再使用时,调用该函数可释放资源。调用该函数将使isActive()
返回false
。
状态查询
bool QSqlQuery::isActive() const
当QSqlQuery对象成功exec()
,且未结束时,返回true。
注意:正在活动SELECT查询,将导致commit()
和rollback()
失败。
操作查询记录
bool QSqlQuery::next()bool QSqlQuery::previous()bool QSqlQuery::first()bool QSqlQuery::last()bool QSqlQuery::seek(int index, bool relative = false)
只向前取数据
void QSqlQuery::setForwardOnly(bool forward)
当forward为true时,只有next()
和seek()
操作可用,且可以减少缓存的使用,还可以提高某些数据库的性能。在QSqlQuery对象执行后设置将导致结果未定义,或崩溃。
读取获得的数据
QVariant QSqlQuery::value(int index) const
例:
QSqlQuery query("SELECT country FROM artist");while (query.next()) { QString country = query.value(0).toString(); doSomething(country);}
注意:SELECT * FROM table的字符返回是不确定的,不宜使用value(0)等。可使用record().indexOf()
将字段名转换为索引值。
QSqlQuery query("SELECT * FROM artist");int fieldNo = query.record().indexOf("country");while (query.next()) { QString country = query.value(fieldNo).toString(); doSomething(country);}
执行效果
int QSqlQuery::numRowsAffected() const
当non-SELECT时,使用上面的函数,当SELECT时,需使用下面的函数
int QSqlQuery::size() const
使用isSelect()
判断是否为SELECT语句。
绑定占位符变量
void QSqlQuery::bindValue(const QString & placeholder, const QVariant & val, QSql::ParamType paramType = QSql::In)
Qt支持的绑定方式
名称绑定到名称占位符
QSqlQuery query;query.prepare("INSERT INTO person (id, forename, surname) " "VALUES (:id, :forename, :surname)");query.bindValue(":id", 1001);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();
绑定值到位置占位符1
QSqlQuery query;query.prepare("INSERT INTO person (id, forename, surname) " "VALUES (?, ?, ?)");query.bindValue(0, 1001);query.bindValue(1, "Bart");query.bindValue(2, "Simpson");query.exec();
绑定值到位置占位符2
QSqlQuery query;query.prepare("INSERT INTO person (id, forename, surname) " "VALUES (?, ?, ?)");query.addBindValue(1001);query.addBindValue("Bart");query.addBindValue("Simpson");query.exec();
绑定值到存储器(不完全支持)
QSqlQuery query;query.prepare("CALL AsciiToInt(?, ?)");query.bindValue(0, "A");query.bindValue(1, 0, QSql::Out);query.exec();int i = query.boundValue(1).toInt(); // i is 65
注意:未绑定的参数,将保持原来的值。
- QT数据库操作QSqlQuery
- QT数据库操作QSqlQuery
- Qt中数据库基本操作--QSqlQuery
- Qt中数据库基本操作--QSqlQuery .
- Qt解析QSqlDatabase、QSqlQuery类操作数据库
- Qt中数据库基本操作--QSqlQuery
- QT数据库QSqlQuery---Qt
- QT数据库QSqlQuery
- QT数据库QSqlQuery
- QT数据库QSqlQuery(转)
- QT学习——QSqlQuery基本操作
- qt设置QSqlQuery.exec()操作sql server时超时
- 十五、Qt数据库 之 利用QSqlQuery类执行SQL语句
- QT的QSqlQuery与QSqlQueryModel读取数据库问题
- QT的QSqlQuery与QSqlQueryModel读取数据库问题
- Qt数据库 利用QSqlQuery类执行SQL语句
- QT的QSqlQuery与QSqlQueryModel读取数据库问题
- QT读入MySQL数据库报 “QSqlQuery::exec:database not open”
- 百度地图api实例练习
- 【搜索】[NOIP 2009]靶形数独
- 百度地图-非常实用的搜索自定义
- linux中C编程的一些时间函数整理
- 百度地图修改鼠标样式
- QT数据库操作QSqlQuery
- 百度地图-修改marker图标(icon)
- HDU 2836 - Traversal (树状数组 + DP)
- 百度地图-点击事件问题
- UIGestureRecognizer手势的判断
- Step Two - 配置JAVA环境
- 数据信息图形化管理的明智选择-VisualNet
- cracked me.1. Acid burn
- 菜鸟练习PAT(四)