马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
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语句,对数据库进行一系列增删改查利用
- 关闭数据库毗连
示例:
- //查看支持驱动的数据库
- QStringList strList = QSqlDatabase::drivers();
- qDebug()<<strList;
- //设置连接参数
- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
- db.setHostName("localhost");
- db.setUserName("root");
- db.setPassword("123456");
- db.setDatabaseName("test01");
- //打开数据库
- if(db.isOpen())
- qDebug()<<"connect.";
- else
- qDebug()<<"error:"<<db.lastError().text();
- //执行sql语句
- QSqlQuery query;
- QString sql = "select * from students";
- query.exec(sql);
- while(query.next()){
- qDebug()<<query.value("id").toUInt()
- <<query.value("name").toString()
- <<query.value("gender").toString()
- <<query.value("uid").toUInt();
- }
- //关闭数据库
- db.close();
复制代码
2.绑定参数
利用绑定参数的方式,向数据库表中增长数据:
- void insertStuInfo(QSqlDatabase db, QString name, QString gender, int uid)
- {
- QSqlQuery insert(db);
- insert.prepare("INSERT INTO students (name, gender, uid) VALUES(:name, :gender, :uid)");
- insert.bindValue(":name",name);
- insert.bindValue(":gender",gender);
- insert.bindValue(":uid",uid);
- bool res = insert.exec();
- if(res)
- qDebug()<<"successful";
- else
- qDebug()<<"error: "<<insert.lastError().text();
- }
复制代码
3.事务利用
①开始事务:
在进行一系列数据库利用之前,可以利用QSqlDatabase的transaction()方法开始一个事务。如果事务开始乐成,返回true;否则返回false。
②提交或回滚事务:
如果所有利用都乐成完成,可以利用QSqlDatabase的commit()方法提交事务;如果某个利用失败,利用rollback()方法回滚事务,如许可以撤销所有已执行的利用。
- QString deleteSql = "DELETE FROM students WHERE name = 'mike'";
- db.transaction();
- bool res = query.exec(deleteSql);
- if(res)
- db.commit();
- else
- db.rollback();
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |