#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