1、安装mysql
下载安装mysql,原来安装过mysql,后来卸载了,再次安装时,在mysql配置工具的最后一步时,总是无法启动服务,错误提示为“could not start the service mysql error:0”,解决方法是删除安装目录的残留文件,停止mysql服务,将C:\ProgramData中mysql的数据文件转移或删除,重启,再次安装就可以了。
2、mysql++准备知识
这里有一些迷惑,在mySql官方网站提供了一个mysql connector/c++的API,还有一个使用很广泛的mysq++。Mysql++的官方网站中有mysql++的作者写的Mysql++和mysql connector/c++的比较,大致如下:
Connector/C++ 是由mysql公司开发的新的mysql c API的封装库, 相比之下,mysql++的开发历史比较悠久……connector/c++是一个java风格的API,mysql++则使用原生的C++标准库,java程序员可能比较喜欢connector/c++,最后还是强调了一下mysql++是强大可靠的。
3、下载安装mysql++
下载并解压mysql++到C:/mysql++-3.1.0,下载地址:http://tangentsoft.net/mysql++/
4、编译mysql++
打开C:/mysql++-3.1.0下的Makefile.mingw文件(注意扩展名)。通过“查找,替换”方法,将所有“C:\Program Files\MySQL\MySQL Server 5.1” 替换为“c:\Program Files\MySQL\MySQL Server 5.5”,这里第40行和115行有一个换行,353行如果替换时选择了全字匹配,将有个5.1存在,总之替换完了用查找再看看哪里还有5.1字样,如果有,还需要修改为正确的路径。
运行cmd,进入mysql的安装目录“c:\Program Files\MySQL\MySQL Server 5.5\lib\opt“;
运行:dlltool -k -d C:\ mysql++-3.1.0\libmysqlclient.def -l libmysqlclient.a;执行成功后在 C:\Program Files\MySQL\MySQL Server 5.5\lib\opt\文件夹中将生成“libmysqlclient.a”文件;
同样运行:dlltool -k -d C:\ mysql++-3.1.0\libmysqlclient.def -l libmysqlclient.lib;执行成功后在 C:\Program Files\MySQL\MySQL Server 5.5\lib\opt\文件夹中将生成“libmysqlclient.lib”文件。
cmd到mysql++-3.1.0中执行:mingw32-make -f Makefile.mingw;执行后在目录中将生成很多.o和.od文件,这个不用管它,也可以删除,用命令mingw32-make -f Makefile.mingw clean可以自动清除编译过程中生成的中间文件。
但我编译到这里,折腾了5遍约8个小时,总是会有错误。Google很久没有找到答案,有可能mysql++-3.1.0不支持mysql5.5,有哪位朋友知道是什么原因还望告知。
一番折腾,还是没有成功。很奇怪,我有点怀疑是mysql版本的问题了。明天接着折腾。
今天把mysql5.5.5卸载了,安装老版本mysql-essential-5.1.58-win32,一路next比较顺利。
在上一次折腾mysql++的第4步,当生成了libmysqlclient.a时,增加以下步骤:
1)将 libmysqlclient.a 拷贝至 c:\mysql++-3.1.0下;
2)在c:\mysql++-3.1.0 下打开 mysql++.bkl,替换相关路径(这一步不知道有什么用,记录在这里备用一下);
执行:mingw32-make -f Makefile.mingw,这里终于在mysql++的目录中生成我需要的mysqlpp.dll(3890 kb),点击install.hta文件,选择将库和include文件存放的路径,我选择了E盘。这样在E盘会有新的文件夹----mysql++,里面有两个文件夹“include”和“lib”,include文件夹里面都是头文件,lib文件夹中有libmysqlpp.a和mysqlpp.dll,可以写代码进行测试了。
这期间,还需要根据不同的IDE进行相关的配置,我使用的是codeblocks10.05版,在全局环境变量中,增加了mysql和mysqlpp的环境变量:
1)mysql:
base:C:\Program Files\MySQL\MySQL Server 5.1
include:C:\Program Files\MySQL\MySQL Server 5.1\include
lib:C:\Program Files\MySQL\MySQL Server 5.1\lib
2)mysqlpp:
base:E:\MySQL++
include:E:\MySQL++\include
lib:E:\MySQL++\lib
新建一个console,代码如下:
#include <iostream>
#include <string>
#include <cstdlib>
#include <mysql++.h>
using namespace std;
int main()
{
mysqlpp::Connection con(false);
con.set_option(new mysqlpp::SetCharsetNameOption("gbk"));
cout << "请输入数据库(root用户)连接密码:";
string pwd;
getline(cin, pwd);
if (!con.connect("mytable", "localhost", "root", pwd.c_str()))
{
cout << "无法连接,请检查密码是否正确!" << endl;
return -1;
}
else
{
cout << "shit.终于连上了。" << endl;
mysqlpp::Query query = con.query("select mycol from firsttable");
if (mysqlpp::StoreQueryResult res = query.store()) {
cout << "We have:" << endl;
mysqlpp::StoreQueryResult::const_iterator it;
for (it = res.begin(); it != res.end(); ++it) {
mysqlpp::Row row = *it;
cout << '\t' << row["mycol"] << endl;
// 或者使用列索引
//cout << '\t' << row[0] << endl;
}
}
else {
cerr << "Failed to get mycol list: " << query.error() << endl;
return 1;
}
}
return 0;
}
编译过程很顺利,不过运行时提示缺少libMYSQL.dll文件,这个文件在mysql的安装目录中(C:\Program Files\MySQL\MySQL Server 5.1\bin),拷贝一个到build文件夹,如debug或release,再运行,OK了。
这里还有一个小技巧,在win7中,当前文件夹使用shift+反键,在快捷菜单中点击“在此处打开命令窗口”即可打开命令窗口,不用在cd....的,比较方便。