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,代码如下:

 
  
  1. #include <iostream> 
  2. #include <string> 
  3. #include <cstdlib> 
  4.  
  5. #include <mysql++.h> 
  6.  
  7. using namespace std; 
  8.  
  9. int main() 
  10. mysqlpp::Connection con(false); 
  11.  
  12.     con.set_option(new mysqlpp::SetCharsetNameOption("gbk")); 
  13.  
  14.     cout << "请输入数据库(root用户)连接密码:"
  15.     string pwd; 
  16.     getline(cin, pwd); 
  17.  
  18.     if (!con.connect("mytable""localhost""root", pwd.c_str())) 
  19.     { 
  20.         cout << "无法连接,请检查密码是否正确!" << endl; 
  21.         return -1; 
  22.     } 
  23.     else 
  24.     { 
  25.         cout << "shit.终于连上了。" << endl; 
  26.         mysqlpp::Query query = con.query("select mycol from firsttable"); 
  27.         if (mysqlpp::StoreQueryResult res = query.store()) { 
  28.             cout << "We have:" << endl; 
  29.             mysqlpp::StoreQueryResult::const_iterator it; 
  30.             for (it = res.begin(); it != res.end(); ++it) { 
  31.                 mysqlpp::Row row = *it; 
  32.                 cout << '\t' << row["mycol"] << endl; 
  33.                 // 或者使用列索引 
  34.                 //cout << '\t' << row[0] << endl; 
  35.             } 
  36.         } 
  37.         else { 
  38.             cerr << "Failed to get mycol list: " << query.error() << endl; 
  39.             return 1; 
  40.         } 
  41.     } 
  42.  
  43.     return 0; 

 

编译过程很顺利,不过运行时提示缺少libMYSQL.dll文件,这个文件在mysql的安装目录中(C:\Program Files\MySQL\MySQL Server 5.1\bin),拷贝一个到build文件夹,如debug或release,再运行,OK了。

      这里还有一个小技巧,在win7中,当前文件夹使用shift+反键,在快捷菜单中点击“在此处打开命令窗口”即可打开命令窗口,不用在cd....的,比较方便。

 


作者:vincent zhang
出处:http://ode.cnblogs.com http://odevincent.blog.51cto.com
Email:wsaspx#hotmail.com
知识共享许可协议
本作品由vincent zhang创作,采用知识共享署名-非商业性使用-禁止演绎 3.0 中国大陆许可协议进行许可。