您的位置:首页 > 编程语言 > Qt开发

QT连接MySQL

2017-03-20 13:48 253 查看
环境说明:

- QT5.5.1;

- MySQL5.7.17-64bit;

连接步骤

- 安装QT(此处不赘述);

- 安装MySQL(直接使用从官网下载的mysql-installer-community.msi),安装到C盘根目录下,下面以此进行操作;

- 使用QT编译生成MySQL驱动dll;

- 加载驱动dll,使用QSqlDatabase/QSqlQuery等接口进行编程;

使用QtCreator编译MySQL驱动

- 将MySQLServer-ver/lib目录下的libmysql.dll以及Libmysql.lib文件拷贝到Qt的bin目录下(即qmake.exe所在的bin目录下,32位和64位作区分);

- 打开“Qt5.5.1\5.5\Src\qtbase\src\plugins\sqldrivers\mysql”目录,使用QtCreator打开mysql.pro文件;

- 增加如下两行配置代码:

INCLUDEPATH += C:\MySQL\MySQLServer5.7\include

LIBS += -LC:\MySQL\MySQLServer5.7\lib -llibmysql


- 上面要注意的是,MySQL的安装路径不允许有中文和空格;如果有中文和空格,有如下两种解决办法:

- 将MySQL的lib和include拷贝到一个独立的目录(未测试,网上有这种解决办法);

- 使用“$$quote”将路径包起来;

- 使用QtCreator构建mysql.pro;(注意区分32位和64位);

- 生成的qsqlmysql.dll的路径在C:/plugins/sqldrivers(估计是mysql.pro的缺省设置,没有深究);

- 然后就可以使用qsqlmysql.dll和qsqlmysql.lib进行QT连接MySQL的编程了;

- 要注意配置Qt的构建套餐(32/64),如下图:



使用qmake和nmake命令行编译MySQL驱动

- libmysql.dll拷贝到Qt的bin目录下;

- 使用Visual Studio自带的命令提示符控制台(配置了相关的环境变量,不能使用windows自带的cmd);

- 进入mysql.pro所在的目录;

- 执行如下命令:

qmake "INCLUDEPATH+=C:\MySQL\MySQLServer5.7\include" "LIBS+=C:\MySQL\MySQLServer5.7\lib\libmysql.lib" mysql.pro


nmake


生成的qsqlmysql.dll文件在Qt5.5.1\5.5\Src\qtbase\plugins\sqldrivers路径下;

使用Qt的接口API编程

- 拷贝生成的qsqlmysql.dll以及qsqlmysql.lib驱动文件到程序目录下,与exe所在路径同级,新建sqldrivers文件夹,放置dll以及lib文件;(这里重点强调一下路径:不是直接放到exe目录下,不是放到plugin/sqldrivers二级目录下,而是sqldrivers一级目录下);

- 拷贝libmysql.dll及libmysql.lib文件到exe同级目录下;

- 在QT项目的.pro中增加sql支持:

QT += sql


在main.cpp中写入如下测试代码,然后使用对应的构建套餐(32Bit/64Bit):<
4000
/li>

#include <QCoreApplication>

#include <QtSql>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QSqlDatabase oConn = QSqlDatabase::addDatabase("QMYSQL", "xxx");
oConn.setHostName("127.0.0.1");
oConn.setDatabaseName("xxx");
oConn.setUserName("root");
oConn.setPassword("123456");
oConn.setPort(3306);

if (!oConn.open())
{
qDebug() << "open failed!";
}
else
{
QSqlQuery oQuery(oConn);
oQuery.prepare("INSERT INTO test (name) VALUES (?)");
oQuery.addBindValue("TOM");
oQuery.exec();
oConn.commit();
}

return a.exec();
}


enjoy!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: