VC2010利用MySQL++访问mysql. 及连接池示例

首先下载并安装mysql,我使用的为mysql 5.5版本,安装时注意安装c++的开发包。


#1  下载mysql++,解压,  找到install.hta, 修改对应路径,指向vc2008所在路径,  生成mysql++ 的lib 至某路径, 如 d:\mysql++3.10\ include

#2  打开mysql++ vc2008目录是mysql++_mysqlpp.sln, 升级到vs2010版本, 因为vs2010去掉了针对整个解决方案修改vc目录的功能(只能单个项目修改,所以原项目编译不过)

#3  视图》其它窗口》随意选择一个项目 ,打开 win32….user节点, 设置vc目录(include, lib 等),则将应用于整个解决方案, 其它项目将继承此设置.

A 需要将 mysql安装目录的lib 路径 设置到 vc目录的lib

B 需要将 mysql安装目录的inlucde路径设置到vc目录的 包含目录及引用目录

C 原解决方案已含了 vc2008上级目录的lib文件夹,因此不用再行设置。

D 复制libmysql.lib 到某目录下,此目录加入到vc目录的lib

#4 编译vc2008解决方案,  将编译成功的 mysqlpp_d.dll, mysqlpp_d.lib, mysql_excommon.lib 保留。

 

 

至此,我们已准备好了 mysql++所需要的头和库文件   d:\mysql++3.10\ include   及 第#4步生成的几个库文件。

接下来我们将其应用于新的项目中

#1 新建 vc2010项目,  因为只有单个项目,直接在项目属性页里设置vc路径

 

A 包含目录  ,设置为用install.hta生成的路径, 即上述的 d:\mysql++3.10\include.  当然还包括mysql安装目录下的MySQL Server 5.5\include

B 引用目录, 同上

C 库目录, 同上, 并且增加了 mysql安装目录下的 MySQL Server 5.5\lib 目录。 并且 我将第 #4 步编译成功的 几个库文件复制在了 d:\mysql++3.10\ include目录下

 

#2 在项目中增加现有项,加入mysqlpp_d.lib,  mysqlpp_excommon.lib, libmysql.lib

 

#3 将mysqlpp_d.dll 复制到 c:\windows\system32目录下

 

#4 设置项目的link的依赖项, 增加对此三lib文件的依赖 .     项目属性页>链接器>输入>额外依赖项>libmysql.lib;mysqlpp_d.lib;mysqlpp_excommon.lib;后面是项目默认的win32库如kernel32.lib之类。

 

#5 试写简单的测试代码,从 test库的ta表中输出记录.

 

 

// tstMYSQL.cpp : 定义控制台应用程序的入口点。

//

 

#include"stdafx.h"

#include<string>

#include<iostream>

#include<mysql++.h>

 

using namespacemysqlpp;

using namespace std;

 

int _tmain(int argc,_TCHAR* argv[])

{

        mysqlpp::Connection con(false);

 

        con.connect("test","localhost","root","密码",3306);

        cout<<"connect to server ok";

        cout<<'\t'<<endl;

          mysqlpp::Query query = con.query("select name from ta");

       if (mysqlpp::StoreQueryResult res = query.store())

       {

           cout << "the it members as bellow :" << endl;

           for (size_t i = 0; i < res.num_rows(); ++i)

           {

               cout << '\t' << res[i][0] << endl;

           }

       }

 

                  cout<<'\t'<< "show complete, press any key toexit."<<endl;

 

        cin.get();

        con.disconnect();

 

        return 0;

}



至此已完成mysql++访问mysql的测试。


接下来,试用连接池.   mysql++提拱了connectionpool的接口, 我们需要对这个虚类的实现。

以下生成CConnectionPool的派生类来进行实现  (参考mysql++示例文档)


class CConnectionPool : public mysqlpp::ConnectionPool
{
public:

    CConnectionPool(
        const char* db,
        const char* server,
        const char* user,
        const char* password) :
    db_(db ? db : ""),
    server_(server ? server : ""),
    user_(user ? user : ""),
    password_(password ? password : "")
    {
    }

    ~CConnectionPool()
    {
        clear();
    }

    mysqlpp::Connection* grab()
    {
        ++conns_in_use_;
        return mysqlpp::ConnectionPool::grab();
    }

    void release(const mysqlpp::Connection* pc)
    {
        mysqlpp::ConnectionPool::release(pc);
        --conns_in_use_;
    }

protected:
    mysqlpp::Connection* create()
    {
        return new mysqlpp::Connection(
                db_.empty() ? 0 : db_.c_str(),
                server_.empty() ? 0 : server_.c_str(),
                user_.empty() ? 0 : user_.c_str(),
                password_.empty() ? "" : password_.c_str());
    }

    void destroy(mysqlpp::Connection* cp)
    {
        delete cp;
    }

    unsigned int max_idle_time()
    {
        return NULL;
    }

private:
    //Number of connections currently in use
    unsigned int conns_in_use_;

    //connection parameters
    std::string db_, server_, user_, password_;
};

CConnectionPool* poolptr = 0;




调用示例:

  //定义数据库连接信息

      const char* db ="test", *server = "localhost", *user ="root", *pass = "xxxx";

 

 

      //准备连接池

      poolptr = new CConnectionPool(db, server, user, pass);

 

      //从连接池返回一个可用连接

      mysqlpp::ScopedConnection cp(*poolptr, true);

 

      cout<<"MySQL++ Connection Pool Test";

      cout<<char(13)<<"IT members asbellow:"<<char(13)<<endl;

 

      //利用此连接进行操作

      mysqlpp::Query query = cp->query("select name from ta");

 

      if(mysqlpp::StoreQueryResult res = query.store())

       {

             cout << "the it members as bellow :" << endl;

             for (size_t i = 0; i < res.num_rows(); ++i)

             {

                    cout <<char(13) << '\t'<< res[i][0] << endl;

             }

      }

 

      cout<<char(13)<< "show completes, press any key toexit."<<endl;

 

      cin.get();

      cp->disconnect();

 


另外,mysql++里准备了threads.h 用于多线程处理, 可以自行调整 。


关于mysql++的更多操作,请参见mysql++手册。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值