MySQL on Qt (1): 安装 MySQL 驱动以及连接 MySQL 与 SQLite
写在前面:
大一下学期的 CPP 大作业“自主订餐系统”可真是颇费了一些力气,每天晚睡早起撸代码,课都没听,很多知识都是现学现用。
为了避免当时学到的东西给全部忘光光(`_>`,我这脑子啊。。。),所以我把当时大作业的一些核心部分(一些零碎的小细节,能记就记)给记录一下,一方面是复习,一方面也方便以后用到的时候查阅。
这篇文章是大作业 MySQL + SQLite 操作相关部分的第一章,主要讲一下如何安装 MySQL 驱动(Win 下)以及如何连接 MySQL 及 SQLite。
准备部分——安装 MySQL 驱动
还记得跟着教程学 Qt MySQL 操作的时候兴致冲冲地跟着打下了一行行代码,然后编译—运行,卧槽,报错。。。报错信息如下:
1 | QSqlDatabase: QMYSQL driver not loaded |
看一下报错信息,大体的意思就是说 Qt 没有连接 MySQL 的驱动。
查看当前系统环境中的 Qt 支持哪些 Sql 驱动,可以输出一下 QSqlDatabase::drivers() 的值。
坑爹的 Qt 在 Win 下并没有附带 MySQL 的连接驱动,需要我们自行编译。
如果只需要连接远程数据库,那我们本地并不需要安装 MySQL,只要找到 MySQL 提供的 libmysql.dll
和 libmysqld.dll
拷贝到 Qt 的安装目录(%QtDir%/migw.../bin
)。网上有教程说 Qt 默认自带已经编译好的 qsqlmysql.dll
和 qsqlmysqld.dll
(路径在 %QtDir%/mingw.../plugins/sqldrivers
),但是实测这些教程都已经老的不能再老了,我的安装目录下就没有自带的编译好的这两个 dll 文件,接下来我们开始着手安装和编译 MySQL 驱动。
第一步:下载 MySQL DLL文件
扔个地址:
下载下来拷贝一下扔过去就好了。。。
(我记得当时搞了一个老版本的才能用。。。记不清了。。。需要的时候现搞吧。)
第二步: 编译 MySQL 驱动
这一步是重中之重,不巧的是我也忘的差不多了。。。
这里我们需要有 Qt 的源码,可以去下载一下。Qt 全部源码2G大小,我们可以仅选择模块进行下载。
用 Qt 打开源码目录下的\src\plugins\sqldrivers\mysql\mysql.pro
。
在末尾加上两句:
1 | INCLUDEPATH += mysql安装目录\include |
构建项目后会生成 qsqlmysql.dll
和 qsqlmysqld.dll
两个文件,然后拷贝到%QtDir%/mingw.../plugins/sqldrivers
文件夹中。
准备部分到这里就大体结束了,理论上 Qt 就已经能成功连接 MySQL 。
上路!连接 MySQL 和 SQLite
配置工程文件
若要使用 Qt 的 SQL 库,则需要在工程文件中添加相应的参数。
CMakeLists.txt:
1 | find_package(Qt5 Sql) |
.pro工程文件:
1 | QT += sql |
连接数据库
SQL 用到的库主要为:
1 |
其中 QSqlDatabase 是最重要的库,数据库的连接及其他基本操作都要在这个类上执行。
连接数据库时,我们主要会用到以下几个函数:
1 | //添加数据库 |
这里要特别注意一下addDatabase()
这个函数的第二个参数 connectionName ,如果不指定这个参数,每次添加的数据库连接都会被应用程序当作默认连接。当初被这个坑了很久,因为大作业中服务端同时操作着两个数据库,一个远程 MySQL 数据库,一个本地 SQLite 数据库,添加第二个 SQLite 数据库后,就出锅不断,原因就在我没有注意第二个参数。
接下来分别就给一下连接 MySQL 和 SQLite 数据库的范例:
MySQL:
1 | QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //添加一个数据库 |
SQLite:
因为 SQLite 数据库没有网络层,是一种本地储存的关系型数据库,因此连接的时候与 MySQL 有很大的差别。
1 | //设置数据库文件名 |
数据库连接成功!
MySQL 部分的第一章到此便结束了, 接下来的一章会讲解一些数据库的基本操作。
补充:
MySQL 与 SQLite 的区别: