Qt4.8.7连接MySql数据库(windows环境)

1.软件准备

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驱动。

下面开始编译驱动:

  1. 打开D:\Qt\4.8.7\src\plugins\sqldrivers\mysql里面的mysql.pro
  2. pro文件里添加两行,就是包含前面Sql数据库的头文件和库,(不知道问什么第二行那样写不行,认不到)
    INCLUDEPATH += "C:/MySql/include"
    #LIBS += "C:/MySql/lib/libmysql.lib"
    LIBS += -LC:/MySql/lib \
        -lmysql

    编译,

  3. qmake mysql.pro

  4. make release 与make debug

  5. debug和release版本都编译一下,编译好后把debug下的libqsqlmysqld4.a、qsqlmysqld4.dll和release下的libqsqlmysql4.a、qsqlmysql4.dll拷贝到D:\Qt\4.8.7\plugins\sqldrivers

  6. 把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 `mysql_free_result@4'
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 `mysql_query@8'
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 `mysql_query@8'
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 `mysql_query@8'
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 `mysql_real_escape_string@16'
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成功解决。

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页