项目-sqlite类的实现
代码如下:
#ifndef __M_HELPER_H__
#define __M_HELPER_H__
#include <iostream>
#include <string>
#include <vector>
#include <sqlite3.h>
#include "mq_logger.hpp"
namespace xypmq
{
class SqliteHelper
{
public:
typedef int(*SqliteCallback)(void*,int ,char**,char**);
SqliteHelper(const std::string &dbfile):_dbfile(dbfile),_handler(nullptr){}
bool open(int safe_level=SQLITE_OPEN_FULLMUTEX)
{
//int sqlite3_open_v2(const char *filename, sqlite3 **ppDb, int flags, const char *zVfs );
int ret=sqlite3_open_v2(_dbfile.c_str(),&_handler,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | safe_level,nullptr);
if(ret!=SQLITE_OK)
{
ELOG("创建/打开sqlite数据库失败: %s", sqlite3_errmsg(_handler));
return false;
}
return true;
}
bool exec(const std::string &sql,SqliteCallback cb,void *arg)
{
//int sqlite3_exec(sqlite3*, char *sql, int (*callback)(void*,int,char**,char**), void* arg, char **err)
int ret=sqlite3_exec(_handler,sql.c_str(),cb,arg,nullptr);
if(ret!=SQLITE_OK)
{
ELOG("%s \n语句执行失败: %s", sql.c_str(), sqlite3_errmsg(_handler));
return false;
}
return true;
}
void close()
{
// int sqlite3_close_v2(sqlite3*)
if(_handler) sqlite3_close_v2(_handler);
}
private:
std::string _dbfile;
sqlite3* _handler;
};
#endif
}