sqlite3的单例模式,C++实现

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);
	}
}

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值