[原创]mysql++的编译及使用mysql++连接mysql数据库

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....的,比较方便。

原文地址:https://www.cnblogs.com/ode/p/2143193.html