项目中需要使用Qt操作mysql数据库,并且有数据量大,数据复杂度高的难题,所以必须使用事务操作。
验证环境:
Qt版本:5.9.7 MSVC64,5.11.2 MSVC64
操作系统:windows 10 , 64位
Mysql数据库版本:5.7
以上环境,使用Qt自带的Mysql数据库驱动,均不支持数据库事务操作。
验证Qt是否支持事务操作的方法:
QSqlDatabase *db;
db = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL","XXX"));
db->setHostName("XXX.XXX.XXX.XXX");
db->setDatabaseName("XXX");
db->setUserName("hsp");
db->setPassword("888168");
db->setPort(3306);
if(db->open())
{
qDebug() << "open success";
qDebug()
qDebug() << db->driver()->hasFeature(QSqlDriver::Transactions);
}
else
{
qDebug() << db->lastError().text();
}
解决步骤:
从Mysql服务器安装目录下,拷贝出头文件和依赖库
在Qt安装目录下,提供了重新编译Mysql驱动的源程序,使用Qt Creator 打开此工程,参考路径:D:\Qt\Qt5.11.2\5.11.2\Src\qtbase\src\plugins\sqldrivers\mysql
在Mysql.pro中配置从Mysql服务器拷贝过来的头文件和依赖库。
win32: LIBS +=-L$$PWD/…/…/…/…/…/…/…/…/…/MySQL/lib/ -llibmysql
INCLUDEPATH +=$$PWD/…/…/…/…/…/…/…/…/…/MySQL/include
DEPENDPATH +=$$PWD/…/…/…/…/…/…/…/…/…/MySQL/include
替换Qt自带的mysql驱动
配置完毕,编译工程文件,如果不出错,则会生成最新的Mysql数据库驱动,用最新的qsqlmysql.dll替换Qt自带的qsqlmysql.dll(最好做个备份)。
大概率会出错,如果出错,再根据具体错误提示,解决即可。(我在编译Mysql驱动时,还出现了很多其他的错误,但没有及时记录,很是遗憾)。
如果你在编译过程中,还遇见了不能解决的问题,可以贴出来,我有空可以帮忙解决。
Qt、C++疑难杂症交流群:302558294