前言
最近写一个聊天软件, server 端得用到 mysql
但是c++能用的库很少,所以我就对照大佬rotation的c语言库和官方api文档做了个c++的库
Bug肯定是还有的,不过正常使用应该没啥问题了
xmysql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #ifndef XMYSQL #define XMYSQL
#include <mysql/mysql.h> #include <string> #include <vector> using std::string; using std::vector; namespace xihale{ class xmysql{ public: xmysql(); xmysql(string host,string username,string password,string dbname,unsigned dbport=0); ~xmysql();
void init(string host,string username,string password,string dbname,unsigned dbport=0); vector<vector<string>> exec(string _exec); const char *error(); private: MYSQL *mysql; }; }
#endif
|
xmysql.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <iostream> #include "xmysql.h" using namespace xihale; using std::clog; xmysql::xmysql(){ mysql=mysql_init(NULL); if(mysql==NULL)throw "初始化 mysql 失败"; } xmysql::xmysql(string host,string username,string password,string dbname,unsigned int dbport){ xmysql(); init(host,username,password,dbname,dbport); } void xmysql::init(string host,string username,string password,string dbname,unsigned int dbport){ mysql=mysql_real_connect(mysql,host.c_str(),username.c_str(),password.c_str(),dbname.c_str(),dbport,NULL,0); if(mysql==NULL)throw "连接 mysql 失败"; } vector<vector<string>> xmysql::exec(string _exec){ if(mysql_query(mysql,_exec.c_str()))throw "数据库语句执行失败"; MYSQL_RES *_result=mysql_store_result(mysql); if(_result){ int fields=mysql_num_fields(_result); vector<vector<string>>result; MYSQL_ROW row; while((row=mysql_fetch_row(_result))){ vector<string>s; for(int i=0;i<fields;++i) s.push_back(row[i]?row[i]:"NULL"); result.push_back(s); } mysql_free_result(_result); return result; }else if(mysql_field_count(mysql)!=0)throw "数据库语句执行失败"; return vector<vector<string>>(); } const char *xmysql::error(){ return mysql_error(mysql); } xmysql::~xmysql(){ mysql_close(mysql); mysql_library_end(); }
|