Qt4.8.7连接MySql数据库(windows环境)
程序员文章站
2024-01-03 14:08:10
...
1.软件准备
- qt-opensource-windows-x86-mingw482-4.8.7.exe Qt4的最后一个版本,bug应该是最少的,其他版本也类似。官方下载链接(329M)
- mysql-5.5.37-win32.msi MySql数据库,安装时注意选择全部安装。百度网盘下载(33M)
2.安装MySql
安装完成后,D盘根目录新建一个MySql文件夹,把D:\Program Files (x86)\MySQL\MySQL Server 5.5目录下的include和lib文件夹拷贝到C:\MySql。此处为了避免MySQL安装路径有空格,导致后续编译MySQL驱动报错,qmake mysql.pro报错但有些情况下没有影响
3.编译Qt的MySql驱动
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("192.168.2.128");
db.setPort(3306);
db.setDatabaseName("sdjk");
db.setUserName("root");
db.setPassword("");
bool ok = db.open();
if (ok)
{
qDebug() << QString("数据库打开成功");
}
else
{
qDebug() << "数据库打开失败:" << db.lastError();
}
上面这段代码就是打开数据库的代码了,不出什么以外的话应该有下面这个错误:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
数据库打开失败: QSqlError(-1, "Driver not loaded", "Driver not loaded")
就是说没有MySql驱动,只有sqlite、odbc3、obdc驱动。
下面开始编译驱动:
- 打开D:\Qt\4.8.7\src\plugins\sqldrivers\mysql里面的mysql.pro
- pro文件里添加两行,就是包含前面Sql数据库的头文件和库,(不知道问什么第二行那样写不行,认不到)
INCLUDEPATH += "C:/MySql/include" #LIBS += "C:/MySql/lib/libmysql.lib" LIBS += -LC:/MySql/lib \ -lmysql
编译,
-
qmake mysql.pro
-
make release 与make debug
-
debug和release版本都编译一下,编译好后把debug下的libqsqlmysqld4.a、qsqlmysqld4.dll和release下的libqsqlmysql4.a、qsqlmysql4.dll拷贝到D:\Qt\4.8.7\plugins\sqldrivers
- 把C:\MySql\lib下的libmysql.dll拷贝到D:\Qt\4.8.7\bin下,发布程序的时候也要这个动态库。
错误2
D:\Qt\4.8.7\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1438: undefined reference to `[email protected]'
debug/qsql_mysql.o: In function `ZN12QMYSQLDriver16beginTransactionEv':
D:\Qt\4.8.7\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1456: undefined reference to `[email protected]'
debug/qsql_mysql.o: In function `ZN12QMYSQLDriver17commitTransactionEv':
D:\Qt\4.8.7\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1473: undefined reference to `[email protected]'
debug/qsql_mysql.o: In function `ZN12QMYSQLDriver19rollbackTransactionEv':
D:\Qt\4.8.7\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1490: undefined reference to `[email protected]'
debug/qsql_mysql.o: In function `ZNK12QMYSQLDriver11formatValueERK9QSqlFieldb':
D:\Qt\4.8.7\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1516: undefined reference to `[email protected]'
collect2.exe: error: ld returned 1 exit status
Makefile.Debug:77: recipe for target 'debug\qsqlmysqld4.dll' failed
mingw32-make[1]: *** [debug\qsqlmysqld4.dll] Error 1
mingw32-make[1]: Leaving directory 'D:/Qt/4.8.7/src/plugins/sqldrivers/mysql'
Makefile:34: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2
此种情况,mysql64位系统,而QT为32位,位数不兼容,我重新卸载64位mysql,安装32位mysql成功解决。
推荐阅读
-
Qt4.8.7连接MySql数据库(windows环境)
-
解决Ubuntu环境下,Qt无法连接MySQL问题
-
Flask在windows环境下连接Mysql
-
Windows环境下安装MySQL
-
云服务器安装数据库MySQL后,MySQL不能从外部连接的原因及解决
-
Navicat premium连接数据库出现:2003 Can't connect to MySQL server on'localhost'(10061)
-
php 数据库mysql查询与连接类_PHP教程
-
关于连接mysql数据库时出现的时区错误timezone的解决办法
-
mysql-数据库MYSQL连接成功,可是遍历next()结果不是我想要呀!!!
-
thinkphp3.x连接mysql数据库的方法(具体操作步骤)_php实例