mysql++ 连接池版本

目录结构

 

.

|-- Makefile

|-- include

|   |-- mysql_conn.h

|   `-- sns_concern.h

|-- lib

|   |-- Db

|   |   |-- Makefile

|   |   `-- mysql_conn.cpp

|   |-- Makefile

|   |-- sns_concern.cpp

|   `-- sns_concern.o

|-- ma2

|-- ma2.cpp

`-- ma2.o

 

 

头文件:

#ifndef MYSQL_CONN_H
#define MYSQL_CONN_H
#include <iostream>
#include <string>
#include <mysql++.h>

using namespace std;
using namespace mysqlpp;

class mypool: public mysqlpp::ConnectionPool
{
public:
    char * _user;
    char * _pwd;
    char * _host;
    char * _db;
    mypool(char* user, char* pwd, char* host, char* db) ;
    ~mypool();
    Connection* create();
    void destroy(Connection *cp);
    unsigned int max_idle_time();
    int get_pool_size();
};


class mysql_conn
{
    public:
        mypool *myptr;
        Connection *con;
        mysql_conn(string dbid, char *charset);
        ~mysql_conn();
        StoreQueryResult mysql_query(string query_str, SQLQueryParms params=NULL);
        int mysql_execute(string query_str,SQLQueryParms params=NULL);
        int get_insert_id();
        static mysql_conn get_instance(string dbid);
        void hello();
        int commit();
        int rollback();
};

#endif

 

cpp文件

#include <iostream>
#include <map>
#include <mysql++.h>

#include "mysql_conn.h"

using namespace std;
using namespace mysqlpp;


mypool::mypool(char* user, char* pwd, char* host, char* db)
{
        _user = user;
        _pwd = pwd;
        _host = host;
        _db = db;
}

mypool::~mypool()
{
    clear();
}

Connection* mypool::create()
{
        return new Connection(_db, _host, _user, _pwd);
}

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

unsigned int mypool::max_idle_time()
{
        return 60;
}
   
int mypool::get_pool_size()
{
        return this->size();
}


map<string,mypool *> dbpoolmap;


mysql_conn mysql_conn::get_instance(string dbid)
{
    char *user = "poker_wrt";
    char *pwd = "poker_wrt";
    char *host = "192.168.0.246";
    char *db = "test";
    char *charset = "gbk";
    if(dbpoolmap.count(dbid) == 0)
    {
        dbpoolmap[dbid] = 0;
    }
    if (0 == dbpoolmap[dbid])
    {
        dbpoolmap[dbid] = new mypool(user, pwd, host, db);
    }
    mysql_conn instance(dbid,charset);
    return instance;
}


mysql_conn::mysql_conn(string dbid, char *charset)
{
    myptr = dbpoolmap[dbid];
    con = myptr->grab();
    string str = "set names " ;
    str = str + charset;
    this->mysql_execute(str);
    this->mysql_execute("set autocommit=0");
}

mysql_conn::~mysql_conn()
{
    cout << "in destruct func" << endl;
    myptr->release(con);
}

void mysql_conn::hello()
{
    cout << "from hello" << endl;
}

StoreQueryResult mysql_conn::mysql_query(string query_str, SQLQueryParms params)
{
    Query query = con->query(query_str);
    query.parse();
    StoreQueryResult res = query.store(params) ;
    return res;
}


int mysql_conn::mysql_execute(string query_str,SQLQueryParms params)
{
    Query query = con->query(query_str);
    query.parse();
    query.execute(params);
    return query.affected_rows();
}

int mysql_conn::get_insert_id()
{
    Query query = con->query();
    return query.insert_id();
}

int mysql_conn::commit()
{
    Transaction trans(*con);
    trans.commit(); 
    return 1;
}

int mysql_conn::rollback()
{
    Transaction trans(*con);
    trans.rollback(); 
    return 1;
}
 

 

代码在附件中

 

你可能感兴趣的:(C++,mysql,连接池,makefile,mysql++)