Qt数据库 利用QSqlQuery类执行SQL语句 下篇
创始人
2024-08-01 19:10:57
0

Qt数据库 利用QSqlQuery类执行SQL语句 下篇是本节介绍的内容,接着上篇文章继续讲 Qt数据库 利用QSqlQuery类执行SQL语句 中篇,先来看内容。

三,批处理操作。

当要进行多条记录的操作时,我们就可以利用绑定进行批处理。看下面的例子。

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQuery q;  
  4.     q.prepare(“insert into student values (?, ?)”);  
  5.  
  6.     QVariantList ints;  
  7.     ints << 10 << 11 << 12 << 13;  
  8.     q.addBindValue(ints);  
  9.  
  10.     QVariantList names;  
  11.     names << “xiaoming” << “xiaoliang” << “xiaogang” << QVariant(QVariant::String);  
  12.     //***一个是空字符串,应与前面的格式相同  
  13.    q.addBindValue(names);  
  14.  
  15.     if (!q.execBatch()) //进行批处理,如果出错就输出错误  
  16.         qDebug() << q.lastError();  
  17.  
  18.     //下面输出整张表  
  19.     QSqlQuery query;  
  20.     query.exec(“select * from student”);  
  21.     while(query.next())  
  22.     {  
  23.         int id = query.value(0).toInt();  
  24.         QString name = query.value(1).toString();  
  25.         qDebug() << id << name;  
  26.     }  

然后在widget.cpp文件中添加头文件 #include    。

我们在程序中利用列表存储了同一属性的多个值,然后进行了值绑定。***执行execBatch()函数进行批处理。注意程序中利用QVariant(QVariant::String)来输入空值NULL,因为前面都是QString类型的,所以这里要使用QVariant::String 使格式一致化。

运行效果如下:

Qt数据库 利用QSqlQuery类执行SQL语句 下篇

四,事务操作。

事务是数据库的一个重要功能,所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。在Qt中用transaction()开始一个事务操作,用commit()函数或rollback()函数进行结束。commit()表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到数据库,事务正常结束。rollback()表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。

如下面的例子:

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions))  
  4.     {     //先判断该数据库是否支持事务操作  
  5.         QSqlQuery query;  
  6.         if(QSqlDatabase::database().transaction()) //启动事务操作  
  7.         {  
  8.             //  
  9.             //下面执行各种数据库操作  
  10.             query.exec(“insert into student values (14, ‘hello’)”);  
  11.             query.exec(“delete from student where id = 1″);  
  12.             //  
  13.             if(!QSqlDatabase::database().commit())  
  14.             {  
  15.                 qDebug() << QSqlDatabase::database().lastError(); //提交  
  16.                 if(!QSqlDatabase::database().rollback())  
  17.                     qDebug() << QSqlDatabase::database().lastError(); //回滚  
  18.             }  
  19.         }  
  20.         //输出整张表  
  21.         query.exec(“select * from student”);  
  22.         while(query.next())  
  23.             qDebug() << query.value(0).toInt() << query.value(1).toString();  
  24.     }  

然后在widget.cpp文件中添加头文件 #include

QSqlDatabase::database()返回程序前面所生成的连接的QSqlDatabase对象。hasFeature()函数可以查看一个数据库是否支持事务。

运行结果如下:

Qt数据库 利用QSqlQuery类执行SQL语句 下篇

可以看到结果是正确的。

对SQL语句我们就介绍这么多,其实Qt中提供了更为简单的不需要SQL语句就可以操作数据库的方法,我们在下一节讲述这些内容。本文章原创于www.yafeilinux.com

小结:Qt数据库 利用QSqlQuery类执行SQL语句 下篇的内容介绍完了,希望本文对你有所帮助!更多关于数据库的操作请看编辑推荐。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...