Qt 操作MySql数据库
配置
问题:Qt连接MySQL的时候提示“QSqlDatabase: QMYSQL driver not loaded”,
解决办法:
- 你的Qt Creator与MySQL位数统一的情况下,从 你的MySQL\lib目录下中将 libmysql.dll 文件复制到C:\Qt\Qt5.6.1\5.6\mingw49_32\bin中。运行程序。
- 如果你的Qt Creator与MySQL位数不统一,下载一个位数与你的Qt相同的Mysql,找到里面的 libmysql.dll文件复制到目录下。
- 总之,必须保证你拿到libmysql.dll这个文件对应的mysql的位数必须与QT的位数相同。
数据库基本操作
对数据库基本操作就是增、删、改、查。
- 新建 Qt Widgets 应用, 项目名称为 database, 类名为Mywidget, 基类选择QWidget。
- 完成后在 database.pro文件中添加如下代码:
1 | QT += sql |
- 连接数据库,在构造函数中添加以下代码
1 |
|
QT支持的数据库驱动有:1
("QSQLITE", "QMYSQL", "QMYSQL3", "QPSQL", "QPSQL7")
- 创建数据表格,继续向后添加代码
1 |
|
此条语句运行一次后要注释,不能多次创建同名的数据表格
- 数据库的另一种操作
1 |
|
- 插入(增)
① 插入一条数据
1 |
|
② 批量插入
两种方法:
obdc风格
1 |
|
oracle风格1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18//oracle风格
//占位符 : + 自定义名字
query.prepare("insert into student (name, age, score)values(:name, :age, :score);");
//给字段设置内容
QVariantList namelist;
namelist << "xiaoa" << "xiaob" << "xiaoc";
QVariantList agelist;
agelist << 19 << 20 << 21;
QVariantList scorelist;
scorelist << 98 << 88 << 99;
//给字段绑定 可以不按照顺序
query.bindValue(":name",namelist);
query.bindValue(":score",scorelist);
query.bindValue(":age",agelist);
//执行预处理命令
query.execBatch();
- 更新数据(改)
1 | QSqlQuery query; |
- 查找并打印(查)
1 |
|
- 在界面上执行删除操作(删)
①设计页面如图所示
②右击按钮转到槽
1 |
|
本地数据库Sqlite
- 新建 Qt Widgets 应用, 项目名称为 Sqlite, 类名为Mywidget, 基类选择QWidget。
- 在你的Sqlite相同目录下创建文件info.db
- 在.pro文件中添加
1 | QT+= sql |
- 操作,同mysql的操作基本一样,因为是本地数据库,所以没有连接数据库的操作
1 |
|
QTableModel类实现对数据库的可视化操作
QSqlTableModel,该类提供了一个可读写单张SQL表的可编辑数据模型。下面实际操作一下
- 新建 Qt Widgets 应用, 项目名称为sqlModel, 类名为Mywidget, 基类选择QWidget。
- 在.pro文件中添加
1 | QT+= sql |
- 设计界面如图所示
注意:和里面的显示数据库的框用的是Item Views(Model-Based)里的TableView。
- 在头文件中添加库和对象
1 |
|
- 实现可视化操作
1 |
|
- 按钮槽函数添加代码
1 | //改 |