#ifndef LIMONP_MYSQLCLIENT_H #define LIMONP_MYSQLCLIENT_H #include #include #include #include #include "logger.hpp" namespace Limonp { using namespace std; class MysqlClient { public: typedef vector< vector > RowsType; private: const char * const HOST; const unsigned int PORT; const char * const USER; const char * const PASSWD; const char * const DB; const char * const CHARSET; public: MysqlClient(const char* host, uint port, const char* user, const char* passwd, const char* db, const char* charset = "utf8"): HOST(host), PORT(port), USER(user), PASSWD(passwd), DB(db), CHARSET(charset){ _conn = NULL;}; ~MysqlClient(){dispose();}; public: bool init() { //cout<& vals) { uint retn = 0; string sql; for(uint i = 0; i < vals.size(); i ++) { sql.clear(); string_format(sql, "insert into %s (%s) values %s", tb_name, keys, vals[i].c_str()); retn += executeSql(sql.c_str()); } return retn; } bool select(const char* sql, RowsType& rows) { if(!executeSql(sql)) { LogError("executeSql failed. [%s]", sql); return false; } MYSQL_RES * result = mysql_store_result(_conn); if(NULL == result) { LogError("mysql_store_result failed.[%d]", mysql_error(_conn)); } uint num_fields = mysql_num_fields(result); MYSQL_ROW row; while((row = mysql_fetch_row(result))) { vector vec; for(uint i = 0; i < num_fields; i ++) { row[i] ? vec.push_back(row[i]) : vec.push_back("NULL"); } rows.push_back(vec); } mysql_free_result(result); return true; } private: MYSQL * _conn; }; } #endif