转载请注明出处,原文地址http://blog.csdn.net/zenki_kong/article/details/44810535
成功编译和连接,网上的教程我看了很多还是不成功,也看到好多人使用connector c++连接Mysql出现各种问题(诸如无法解析外部符号等),经过我的多番尝试,终于成功了
本文写的是使用mysql connector c++的方式进行C++连接MYSQL,如果想了解使用mysql API连接的请看我另一篇博客http://blog.csdn.net/zenki_kong/article/details/44810243
本文使用64位C++程序+64位的connector还有Mysql,32位的话应该更简单
之所以喜欢用connector的原因,是因为太方便了,跟直接操作mysql没什么区别
先交代一下环境,VS2013+64位MySql5.6.23安装版+Boost1.57(connector1.1版本后好像都需要用到这个库)+64位WIN7
1.首先说一下为何如此多人都出现编译报错,诸如无法解析的外部符号XXX等等,还找不到解决方法,这个可能是你的链接库和包含文件没包含正确,还很有可能是这个原因
妈妈的。。。这个问题也困扰了我很久。。。后来我想起了之前用mysql api也出现类似的问题。。然后就找到原因了。。。请看下图
这是我安装完64位后的mysql5.6.23...大家有没有发现很明显的问题。。。那就是除了mysql主体是64位,其他组件都是32位,我们要用到的connector c++也是32位的!
如果你的程序是64位的,当然是用不了32位的库,然后就出现无法解析的外部符号XXX的咯(ˉ﹃ˉ),感觉被甲骨文坑惨了。。。
如果你是32位的程序,那就可以无视这个问题了,如果你是64位的,,,要另行去官网下载64位版的connector c++……
这个是我用的64位1.1.5版本
安装完后我们再看看
connector c++变64位了,这就对了。。。
2.首先肯定是安装Mysql了,如果你使用WAMP或者PHPSTUDY等集成工具,应该是没有mysql connector的,去官网下一个吧,解压版或者安装版的也行,32位还是64位一定要跟你的c++程序一致,如果你是开发64位程序,就算是安装版那你也要去单独下一个64位版本的connector c++,原因就在第一点
3.下载Boost库,和安装,具体步骤如下
(1)到http://www.boost.org/下载Boost,这是我下载的版本http://jaist.dl.sourceforge.net/project/boost/boost/1.57.0/boost_1_57_0.zip
(2)安装这个也有点繁琐,跟着我来吧,首先把下载下来的压缩文件解压到你喜欢的地方,这个地方就是用来放boost库的了
(3)然后打开CMD命令控制台,进入到boost目录,打开bootstrap.bat
执行完后会发现Boost目录下多了个bjam.exe程序
打开这个bjam程序进行Boost安装,这个过程需要10-20分钟不等,具体我就不知道了,反正等了好久我就去歇了会……
到此,Boost库就安装成功了
4.继续我们的主题,打开VS2013,建起或打开你的程序,首先务必请选择你的平台,是32位还是64位,如果是64位,你需要转换一下,如下图
打开配置管理器
右上角活动解决方案平台点新建
5.设置包含的文件和库,先给大家看看我的mysql目录
我的mysql主程序是装载根目录的,你们的include和lib大概在mysql server里面,可以明显看到,我把64位和32位的connector c++都装了
(1)设置包含的文件和库,打开VS2013工程项目,打开项目-属性
包含的文件目录和库目录,各3个,请根据自己的路径来设置
6.上代码,当然你要事先建一个表来测试,至于函数的使用就自行度娘吧,之所以喜欢用connector的原因,是因为太方便了,跟直接操作mysql没什么区别
#include<iostream>
#include<winsock2.h>
#include <mysql_connection.h>
#include <mysql_driver.h>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
#pragma comment(lib,"debug\\mysqlcppconn.lib")
using namespace std;
int main()
{
sql::mysql::MySQL_Driver *driver;
sql::Connection *conn;
sql::Statement *state;
sql::ResultSet *result;
driver = sql::mysql::get_driver_instance();
conn = driver->connect("localhost", "root", "root");
state = conn->createStatement();
state->execute("use dnd");
result = state->executeQuery("select * from user");
//// 输出查询
while (result->next()!=NULL)
{
cout<<result->getString("account")<<endl;
}
Sleep(10000);
return 0;
}
7.这时编译调试弹出一个缺少mysqlcppconn.dll的错误
解决方法:把对应版本(Debug/Release)的mysqlcppconn.dll放到生成的exe目录下(注意如果你切换了x64平台,你可能创建了新的解决方案目录,这时应该放在x64\debug(release)目录下,里面有生成64位exe程序),反正mysqlcppconn.dll一定要跟对应版本(是32还是64位,是Debug还是Release)的exe放一起。
再编译调试,这时又有问题(ˉ﹃ˉ)……缺少msvcp100d.dll和msvcr100d.dll,我用VS2013有这个问题,用VS2010的同学不知道有木有这个问题呢?
解决方法:去度娘搜索下一个吧,注意要下对应的版本,32位和64位要区分,不然会出错
64位的:http://download.csdn.net/download/chinaworker/5766637(亲测可用)
32位的亲自己去找找吧,我懒……(─.─|||
8.再次编译运行……终于成功了!!!
表示真的很繁琐,也很容易出错,看了网上好多教程也搞不好,最后自己苦拼一两天,终于不负有心人……
如果按照本文章来做还出现问题,欢迎跟帖回复,也请仔细看看文章看看是不是哪里设置不对了