1、CmyData.h
#pragma once
#include "sqlite3.h"
#include <iostream>
using namespace std;
class CmyData //就是对数据库做相关操作的类
{
public:
static CmyData* getMyData();//单例模式,静态的成员函数 获取唯一的对象
~CmyData();
//建表、增、删、改、
void nores_exec(const char* sql);
//查 : sql,qres、row、col
void getres_exec(const char* sql, char**& qres, int& row, int& col);
private:
CmyData();//单例模式,构造函数要私有
sqlite3* mydb;
static CmyData* data;//单例模式,静态的数据成员 保存唯一的对象
};
2、CmyData.cpp
#include "CmyData.h"
CmyData* CmyData::data = nullptr;//单例模式,使用懒汉模式
CmyData* CmyData::getMyData()
{
if (CmyData::data == nullptr)
{
CmyData::data = new CmyData;
}
return CmyData::data;
}
CmyData::~CmyData()//析构实现数据库的关闭
{
sqlite3_close(this->mydb);
}
CmyData::CmyData()//构造实现数据库的打开
{
this->mydb = nullptr;
int res = sqlite3_open("./data/user.db", &this->mydb);
if (res == SQLITE_OK)
{
//cout << "database open ok" << endl;
}
else
{
cout << sqlite3_errmsg(this->mydb) << endl;
}
}
//建表、增、删、改、
void CmyData::nores_exec(const char* sql)
{
char* errmsg = NULL;
int res = sqlite3_exec(this->mydb, sql, NULL, NULL, &errmsg);
if (res == SQLITE_OK)
{
//cout << "sql exec ok" << endl;
}
else
{
cout << errmsg << endl;
sqlite3_free(errmsg);
}
}
//查 : sql,qres、row、col
void CmyData::getres_exec(const char* sql, char**& qres, int& row, int& col)
{
char* errmsg = NULL;
int res = sqlite3_get_table(this->mydb, sql, &qres, &row, &col, &errmsg);
if (res == SQLITE_OK)
{
//cout << "sql exec_query ok" << endl;
}
else
{
cout << errmsg << endl;
sqlite3_free(errmsg);
}
}