#ifndef LIMONP_MYSQLCLIENT_H #define LIMONP_MYSQLCLIENT_H #include #include #include #include #include "logger.hpp" #include "InitOnOff.hpp" namespace Limonp { using namespace std; class MysqlClient: public InitOnOff { public: typedef vector< vector > RowsType; private: const string _host; const size_t _port; const string _user; const string _passwd; const string _db; const string _charset; public: MysqlClient(const string& host, size_t port, const string& user, const string& passwd, const string& db, const string& charset = "utf8"): _host(host), _port(port), _user(user), _passwd(passwd), _db(db), _charset(charset), _conn(NULL) { _setInitFlag(_init()); } ~MysqlClient() { if(_conn) { mysql_close(_conn); } }; private: bool _init() { //cout<& vals) { size_t retn = 0; string sql; for(size_t i = 0; i < vals.size(); i ++) { sql.clear(); string_format(sql, "insert into %s (%s) values %s", tableName.c_str(), keys.c_str(), vals[i].c_str()); retn += executeSql(sql.c_str()); } return retn; } bool select(const string& sql, RowsType& rows) { if(!executeSql(sql)) { LogError("executeSql failed. [%s]", sql.c_str()); return false; } MYSQL_RES * result = mysql_store_result(_conn); if(!result) { LogError("mysql_store_result failed.[%d]", mysql_error(_conn)); return false; } size_t num_fields = mysql_num_fields(result); MYSQL_ROW row; while((row = mysql_fetch_row(result))) { vector vec; for(size_t 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