qt QSqlQuery
2015-11-16 09:35
429 查看
QT数据库QSqlQuery
SQL执行操作 QSqlQuery提供了对数据库记录的Select、Insert、Update、Delete操作。 SELECT操作: QSqlQuery query; query.exec("SELECT name, salary FROM employee WHERE salary > 50000"); while (query.next()) { QString name = query.value(0).toString(); int salary = query.value(1).toInt(); qDebug() << name << salary; } 通过QSqlQuery::next()、QSqlQuery::previous()、QSqlQuery::first()、QSqlQuery::last()、QSqlQuery::seek(),可以得到下一条、上一条、第一条、最后一条、任意一条记录的位置。 INSERT操作: //单一插入数据 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 myTable values (?, ?)"); QVariantList ints; ints << 1 << 2 << 3 << 4; query.addBindValue(ints); QVariantList names; names << "Harald" << "Boris" << "Trond" << QVariant(QVariant::String); query.addBindValue(names); if (!query.execBatch()) qDebug() << query.lastError(); UPDATE操作: QSqlQuery query; query.prepare("UPDATE employee SET salary = ? WHERE id = 1003"); query.bindValue(0, 70000); query.exe(); DELETE操作: QSqlQuery query; query.exec("DELETE FROM employee WHERE id = 1007"); 事务处理: QSqlDatabase::database().transaction(); QSqlQuery query; query.exec("SELECT id FROM employee WHERE name = 'Torild Halvorsen'"); if (query.next()) { int employeeId = query.value(0).toInt(); query.exec("INSERT INTO project (id, name, ownerid) " "VALUES (201, 'Manhattan Project', " + QString::number(employeeId) + ")"); } QSqlDatabase::database().commit(); 如果数据库引擎支持事务处理,则函数QSqlDriver::hasFeature(QSqlDriver::Transactions)将返回 真。 可以通过调用QSqlDatabase::transaction()来初始化一个事务处理。之后执行你想在该事务处理的工作。 完了再执行QSqlDatabase::commit()来提交事务处理或QSqlDatabase::rollback()取消事务处理。 这里在举个QSqlDriver::hasFeature(QSqlDriver::QuerySize)例子,可以较快的统计查询记录行数。 QSqlQuery query; int numRows; query.exec("SELECT name, salary FROM employee WHERE salary > 50000"); QSqlDatabase defaultDB = QSqlDatabase::database(); if (defaultDB.driver()->hasFeature(QSqlDriver::QuerySize)) { numRows = query.size(); } else { // this can be very slow query.last(); numRows = query.at() + 1; } 存储过程: AsciiToInt()是数据库中的一个存储过程。 但我在网上以前好像看过说是SQL Server中的存储过程是通过"EXEC"完成的,而不是"CALL",这里我不确定!留下一个疑问吧~ QSqlQuery query; query.prepare("CALL AsciiToInt(?, ?)"); query.bindValue(0, "A"); query.bindValue(1, 0, QSql::Out); |
相关文章推荐
- Android 高级UI设计笔记07:RecyclerView 的使用(ListView的扩展)
- CYC-UIViewController的生命周期及iOS程序执行顺序
- (java)Implement Queue using Stacks
- String,StringBuffer与StringBuilder的区别??
- Android UI之代码动态设置ImageView的宽度和高度
- UITableViewEdit
- break 与 continue的区别
- UITableView的一些常用方法
- NGUI -- UICamera
- 读《The Building a head thing Business When about there Are No》《创业维艰》
- LintCode "Longest Increasing Continuous subsequence II" !!
- IOS之UI--小实例项目--综合使用
- Educational Codeforces Round 1 B. Queries on a String(字符串简单操作)
- android基础--Handler,Loop,MessageQueue
- KVO(key value observer)浅解及实例
- Easyui--datagrid 的使用 (弹出框的使用)
- apue学习第一课,环境安装
- create unique string in batch
- UIImageview
- UIView之【UIViewContentMode】