欢迎投稿

今日深度:

Qt C++连接MySQL/MariaDB数据库,mysqlmariadb

Qt C++连接MySQL/MariaDB数据库,mysqlmariadb


Env

数据库是MariaDB,其实就是MySQL(二者的恩怨情仇请自行了解);版本MariaDB 10.1 x64,不在本机上(另外一台??)

Qt 5.9.1 32bit,Qt Creator 4.3.1,Windows 10 x64

连接MySQL数据库的两种方式

https://www.mysql.com/products/connector/
上述链接是MySQL官网的MySQL Connectors页面,注意以下内容

MySQL provides standards-based drivers for JDBC, ODBC, and .Net enabling developers to build database applications in their language of choice. In addition, a native C library allows developers to embed MySQL directly into their applications.

MySQL数据库的连接可以分成两种方式,一种是通过Driver驱动程序的方式;另一种是通过MySQL提供的native C LIB 里面API的方式,也就是上表最后一行的C API for MySQL。
可以参考以下link
c++连接mysql数据库的两种方法(ADO连接和mysql api连接)

(一)通过Driver连接

通过Driver的方式,这种方法的优点是可以结合各种面向对象的数据库访问技术(ADO, ODBC, JDBC等等),只要配置好不同的驱动,同样的代码可以访问各种不同的数据库;缺点就在于驱动的安装和配置不是一般的麻烦,还要考虑数据库版本和驱动版本兼容性的问题。

(二)通过MySQL提供的C API连接

相比于ADO之类的方法,这种方式不用配置驱动,因此也没有反人类的版本兼容性问题。
我之前的代码是在MFC下写的,现在要迁移到Qt上来,经过实验,也是同样的代码可以正常工作(当然这是在数据库软件没有变的前提下)。主要工作是为Qt Creator**配置MySQL的这个第三方LIB**。
使用API的方式连接,需要加载mysql的头文件和lib文件。

先看看VC/VS下是怎么配置LIB的

以VS2010为例
1. 下载上述的C API for MySQL(mysqlclient),解压得到\include目录(有mysql.h那个目录)和\lib目录,比如我的H:\3rdPartyLib\MySQL\include;在项目属性配置的附加包含目录中添加路径
<你的解压路径>\include
如果MySQL安装在本机,也可以在MySQL的安装目录下找。
2. 把libmysql.dll和libmysql.lib文件(解压得到的\lib目录)拷贝到所建的工程目录下。然后在头文件里包含以下内容:

//mysql所需的头文件和库文件 
#include "winsock.h"
#include "mysql.h"
#pragma comment(lib,"libmySQL.lib") 

Qt Creator工程配置MySQL C LIB

我的Qt Creator是Windows下的,编译器MingGW 5.3.0 32bit
1. 在Qt项目的.pro文件中添加MySQL的include目录路径

INCLUDEPATH += “<你的解压路径>/include”

引号要不要都行,如果这步有问题,会提示找不到mysql.h头文件。
2. MinGW不支持#pragma comment(),因此需要通过在.pro文件中添加

LIBS += “<你的解压路径>/lib/libmysql.lib”

至于有的说.lib库文件MinGW不支持,需要重新编译成.a静态库文件的,在我这里没这回事儿。
另外我试过用Mingw-utils的reimp去编译下载得到的libmysql.lib,则是提示我那个文件invalid or corrupted。
究其原因,是因为C API for MySQL里面的libmysql.lib是一个导入库而不是静态库,详情参见静态库、动态库及导入库
另外一种说法是新版本的MingGW中reimp已经取消了,只有老版本的才有。现在mingw可以直接使用msvc的lib(2014-09)。
never mind…
3. 另外,.pro文件中还要加上

QT += sql

另外需要注意的是.pro文件里面变量LIBS += 后面库路径的写法,-L后面是路径,-l后面是库文件名称,其中需要注意的是如-lxxxx.lib,则实际的库文件名称应该是libxxxx.lib,否则会提示找不到;没错,就是这么不智能

www.htsjk.Com true http://www.htsjk.com/mariadb/36932.html NewsArticle Qt C++连接MySQL/MariaDB数据库,mysqlmariadb Env 数据库是MariaDB,其实就是MySQL(二者的恩怨情仇请自行了解);版本MariaDB 10.1 x64,不在本机上(另外一台??) Qt 5.9.1 32bit,Qt Creator 4.3.1,W...
相关文章
    暂无相关文章
评论暂时关闭