Qt编译数据库驱动(Qt6)
背景介绍
在高版本的Qt中官方并没有为我们提供可用的mysql和oralce插件,只提供了源代码(不能直接使用),需要我们基于这些源码自行编译得到对应的动态库(静态库)之后,才能被程序加载从而连接上相应的数据库。
关于在程序中连接数据库有很多种处理方式,比如:odbc、ado等,在Qt底层也对数据库的连接进行了封装,基于不同的连接方式为我们提供了不同的插件(二进制代码,在需要的时候被加载,表现形式为动态库、静态库)。
查看Qt版本
查看mysql版本
MySQL的版本是Ver 8.0.31 for Win64 on x86_64。这意味着你的MySQL是运行在64位Windows操作系统上的,并且安装的MySQL版本是64位的。
注意事项
Qt 编译套件的位数和数据库的位数必须相同,都是32位或都是64位。
编译驱动步骤
1.确保Qt下载了源码
2.找到源码目录
3.打开项目文件
问题:发现mysql文件夹中,没有以前版本的mysql.pro文件,可供编译
用MinGW编译
4. 新建一个目录专门用来生成驱动
原因:mysql的默认安装目录存在空格,将会导致找不到对应的文件,所以需要将mysql文件夹中的部分文件夹复制到该临时文件夹中,再进行编译。
5.用Qt Creator打开项目
6.选用编译器
7. Qt Creator会自动配置好项目
8.找到mysql的目录
9.将该文件夹下的include和lib文件夹复制到你的另一个工作目录
10.从项目文件中找到并打开.cmake.conf文件
在末尾增加三句话
规则
我的
set(QT_REPO_MODULE_VERSION "6.2.4") SET(FEATURE_sql_mysql ON) SET(MySQL_INCLUDE_DIR "D:/Colin/temp/include") SET(MySQL_LIBRARY "D:/Colin/temp/lib/libmysql.lib")
报错(不一定都有)
1.
在其他地方已经编译过了,将原来的缓存目录(build-sqldrivers-Desktop_Qt_6_2_4_MinGW_64_bit-Debug)删除,
2.
修改D:\App\QT\6.2.4\Src\qtbase\src\plugins\sqldrivers\mysql\qsql_mysql.cpp文件第1256行
11.编译成功
12.查看生成的文件
路径:D:\App\QT\6.2.4\Src\qtbase\src\plugins\build-sqldrivers-Desktop_Qt_6_2_4_MinGW_64_bit-Debug\plugins\sqldrivers
13. 将编译好的驱动复制到编译器的驱动插件文件夹中
14.将MySQL的lib和dll文件给编译器
15.测试代码
1)在pro文件中添加数据库模块
2)回想一下密码
3)源文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QStringList list = QSqlDatabase::drivers();
qDebug() << list;
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
if(db.isValid())
{
QMessageBox::information(this, "conn", "ok");
}
else
{
QMessageBox::information(this, "conn", "error");
}
db.setHostName("127.0.0.1"); // 本地连接
db.setPort(3306); // 如果使用的是默认端口可以不设置
db.setUserName("root"); // 数据库用户名
db.setPassword("1234"); // 数据库密码
db.setDatabaseName("mysql"); // 数据库名字
if(db.open())
{
QMessageBox::information(this, "打开数据库", "数据库打开成功, 可以读写数据了......");
}
else
{
QString msg = "数据库打开失败: " + db.lastError().text();
QMessageBox::information(this, "打开数据库", msg);
}
}