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

qt QSqlQuery的更多相关文章

  1. QT QSqlQuery QSqlQueryModel

      SQL执行操作 QSqlQuery提供了对数据库记录的Select.Insert.Update.Delete操作. SELECT操作: QSqlQuery query; query.exec(&q ...

  2. Qt:QSqlQuery

    0.说明 QSqlQuery提供了执行SQL代码的方法. QSqlQuery封装了在QSqlDatabase中查询.检索数据的相关函数.它可以用来执行如SELECT.INSERT.UPDATE.DEL ...

  3. 保持Qt GUI响应的几种方法

    最开始使用Qt时就遇到过QT Gui失去响应的问题,我是用多线程的方式解决的,然而通常来说,多线程是会降低程序的运行速度. 之后,在使用QSqlQuery::execBatch()函数时,Qt Gui ...

  4. QT数据库操作

    浏览: 在QSqlQuery类中当执行exec()后会把指针放在记录集中第一个记录之上,所以需要调用QSqlQuery::next()来获取第一个数据,下面通过循环体来遍历所有表中的数据. while ...

  5. QT连接MySQL

    Qt 连接MySQL 是件很简单的事,但也有可能很不简单. QT给我们的提示只有 QMYSQL driver not loaded,让我们毫无头绪.访问其他数据库也可以用同样的方法解决. Qt 访问 ...

  6. Qt Sqlite qwt 发布过程中碰到的问题runtime error

    qt版本:4.8.0 qwt版本:6.1.2 使用dll show检测缺少的dll,或者笨一点的方法,点击运行差什么找什么放进去: 左上显示exe调用哪些dll,右边是dll又再次调用啦哪些dll: ...

  7. QT连接Linux mysql注意

    windows: #define MYSQLDB "QMYSQL"#define MYSQLDB_HOSTNAME "192.168.228.168"#defi ...

  8. Qt 使用sqlserver

    1. pro 添加 QT       +=sql 2. void MainWindow::connectSqlServer() { QSettings *setIni = new QSettings( ...

  9. 年底奉献-QT编写视频监管平台(开源)

    忙忙碌碌又是一年,算算自己毕业四年半,一直在现在这家公司做研发外加总经理助理,研发起初用的VB.NET,而后全面转为C#,最后又全面转为QT,都是由于项目需要,算下来自己搞QT编程也已经四年了,201 ...

随机推荐

  1. ActionBar官方教程(6)把图标变成一个返回到上级的按钮,同一个app间,不同app间,不同fragment间

    Navigating Up with the App Icon Enabling the app icon as an Up button allows the user to navigate yo ...

  2. HTML5标签一览

    HTML5标签一览,点击下载 访问密码:1907

  3. 基于LAMP平台的网站架构(或Web系统架构)

    1.网站架构的前提(或者说需求) 我们公司是一电子商务的网站,因为线下家具建材项目的推广需求,从而有了我们公司的这个线上网站,在这里我贴一张公司的网站架构图. 总体来说网站规模不是太大,注册人数在15 ...

  4. hadoop2.2编程:使用MapReduce编程实例(转)

    原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...

  5. Running an etcd cluster on localhost

    Purpose Run a cluster on localhost while investigating etcd Use a static cluster (So we have no exte ...

  6. BrnMall多店版网上商城正式发布

    前些日子一直忙于多店版网上商城系统BrnMall的开发,工作比较多,所以博客断了.这几天项目完成了,时间比较自由,所以把这段时间总结的一些关于单店版BrnShop和多店版BrnMall区别写下来,希望 ...

  7. LoadRunner 参数化详解

    可能稍微对LR 有些了解的人都知道LR 参数化的功能,今天请跟我来一起好好理一下. 首先,咱们先说一下为啥要用参数化?假如您录制了一个登录的脚本,如下所示, web_submit_form(" ...

  8. Mesos编译步骤及部署注意事项(Ubuntu)

    注意事项: 编译过程如果有错误提示少什么库,则相应的安装库即可在编译中出现 g++: internal compiler error: Killed (program cc1plus)的错误是因为内存 ...

  9. android实现图片平铺效果&WebView多点触控实现缩放

    1.图片平铺效果实现非常简单,只要在xml中添加一个 android:tileMode的属性就可以了.首先在drawable文件夹中添加自己的my.xml文件.代码: Java代码 <?xml ...

  10. spring 的配置 bean>>property>>name属性

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...