Qt数据库相关利用

打印 上一主题 下一主题

主题 1006|帖子 1006|积分 3018

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
一、前言
二、类与接口介绍
1.毗连管理类
2.数据利用类
3.数据模型类
4.其它类
三、主要利用流程
1.示例
2.绑定参数
3.事务利用

  
一、前言

要在Qt中利用数据库,首先要安装对应的数据库,还要确保安装了Qt SQL模块。利用MySQL时,可能还要添加数据库驱动。
可参考下文:
Qt利用数据库详解_qt 数据库-CSDN博客
Qt中编译数据库驱动 | 爱编程的大丙
在利用时要添加模块依赖:QT += sql,以引入Qt SQL模块。

   
二、类与接口介绍

1.毗连管理类

QSqlDatabase:用于创建和管理数据库毗连。通过调用静态方法addDatabase()创建毗连,指定命据库驱动类型和毗连名称。
可以利用setHostName()、setUserName()、setPassword()、setDatabaseName()、setPort()来设置毗连参数;open()打开毗连,close()关闭毗连,isOpen()判断毗连是否打开,lastError()获取毗连错误信息。
   
2.数据利用类

QSqlQuery:用于执行SQL语句并处置惩罚结果集。
常用方法包括exec()执行SQL语句,isActive()判断查询是否处于运动状态,isSelect()判断当前查询是否是SELECT查询,next()移动到结果会合的下一条记载,value()获取当前记载中指定列的值,prepare()预备一个SQL查询(可利用占位符),bindValue()绑定参数到查询。
QSqlError:用于表示数据库利用过程中的错误信息。通过QSqlDatabase或QSqlQuery的lastError()方法获取,包罗错误代码、错误文本等信息。
   
3.数据模型类

QSqlQueryModel:基于SQL查询的只读模型,用于在视图中显示数据库查询结果。
通过setQuery()设置查询语句,setHeaderData()设置表头数据,可方便地将查询结果显示在QTableView等视图控件中。
QSqlTableModel:提供了一次只能利用一个SQL表的读/写模型,可以浏览和修改独立的SQL表,并且只需编写很少的代码,无需相识SQL语句。
常用方法包括setTable()设置要利用的表,select()执行查询并加载数据,setEditStrategy()设置编辑计谋,submitAll()提交所有修改,revertAll()撤销所有修改。
QSqlRelationalTableModel:在QSqlTableModel基础上提供了对外键的支持,可用于处置惩罚具有外键关系的数据库表,通过setRelation()设置外键关系。
   
4.其它类

QSqlRecord:用于表示数据库表中的一条记载,包罗了记载的字段信息和数据,通过QSqlQuery的record()方法获取。
QSqlField:用于表示数据库表中的一个字段,包罗了字段的名称、类型等信息,通过QSqlRecord的field()方法获取。
  

   
三、数据库利用

1.主要流程


  • 创建数据库毗连对象并设置毗连参数
  • 打开数据库毗连
  • 编写并执行SQL语句,对数据库进行一系列增删改查利用
  • 关闭数据库毗连
示例:
  1. //查看支持驱动的数据库
  2. QStringList strList = QSqlDatabase::drivers();
  3. qDebug()<<strList;
  4. //设置连接参数
  5. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
  6. db.setHostName("localhost");
  7. db.setUserName("root");
  8. db.setPassword("123456");
  9. db.setDatabaseName("test01");
  10. //打开数据库
  11. if(db.isOpen())
  12.     qDebug()<<"connect.";
  13. else
  14.     qDebug()<<"error:"<<db.lastError().text();
  15. //执行sql语句
  16. QSqlQuery query;
  17. QString sql = "select * from students";
  18. query.exec(sql);
  19. while(query.next()){
  20.     qDebug()<<query.value("id").toUInt()
  21.             <<query.value("name").toString()
  22.             <<query.value("gender").toString()
  23.             <<query.value("uid").toUInt();
  24. }
  25. //关闭数据库
  26. db.close();
复制代码
   
2.绑定参数

利用绑定参数的方式,向数据库表中增长数据:
  1. void insertStuInfo(QSqlDatabase db, QString name, QString gender, int uid)
  2. {
  3.     QSqlQuery insert(db);
  4.     insert.prepare("INSERT INTO students (name, gender, uid) VALUES(:name, :gender, :uid)");
  5.     insert.bindValue(":name",name);
  6.     insert.bindValue(":gender",gender);
  7.     insert.bindValue(":uid",uid);
  8.     bool res = insert.exec();
  9.     if(res)
  10.         qDebug()<<"successful";
  11.     else
  12.         qDebug()<<"error: "<<insert.lastError().text();
  13. }
复制代码
   
3.事务利用

①开始事务:
在进行一系列数据库利用之前,可以利用QSqlDatabase的transaction()方法开始一个事务。如果事务开始乐成,返回true;否则返回false。
②提交或回滚事务:
如果所有利用都乐成完成,可以利用QSqlDatabase的commit()方法提交事务;如果某个利用失败,利用rollback()方法回滚事务,如许可以撤销所有已执行的利用。
  1.     QString deleteSql = "DELETE FROM students WHERE name = 'mike'";
  2.     db.transaction();
  3.     bool res = query.exec(deleteSql);
  4.     if(res)
  5.         db.commit();
  6.     else
  7.         db.rollback();
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

缠丝猫

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表