⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdbapi.h

📁 一个自行开发的内存数据管理的包
💻 H
字号:
#ifndef __MdbApi_h__
#define __MdbApi_h__

/***字段类型定义***/
#define CT_NUM		1
#define CT_CHAR		2
#define CT_VARCHAR	3

/***宿主变量类型定义***/
#define FT_INT8		1
#define FT_UINT8		2
#define FT_INT16		3
#define FT_UINT16		4
#define FT_INT32		5
#define FT_UINT32		6
#define FT_INT64		7
#define FT_UINT64		8
#define FT_STRING		9


/***字段定义参数***/
struct SCreateColPara
{
const char *m_szColName;   //字段名
int   m_nColType;          //字段类型,为CT_NUM,CT_CHAR,CT_VARCHAR
int   m_nColTypeLen;       //字段长度,如果字段定义为number(10),此处就填10
//int   m_bNullAllowed; 
};


/***表定义参数***/
struct SCreateTblPara
{
const char *m_szTblName;	//表名
int   m_nColCnt;			//字段个数
SCreateColPara *m_psCreateColPara;	//字段定义参数
};

/***索引类型定义***/
#define IDX_HT_TYPE	1     //哈希索引类型

/***索引定义参数***/
struct SCreateIdxPara
{
const char *m_szIdxName;	//索引名
int m_nIdxType;			//索引类型
int   m_nColCnt;			//索引涉及字段个数
const char **m_szColNames;    //索引字段名称组
};

/***索引组定义参数***/
struct SCreateIdxesPara
{
int m_nIdxCnt;			//索引个数
SCreateIdxPara *m_psCreateIdxParea;	//索引定义参数组
};

/***SQL条件参数,目前条件只支持字段相等判断,多个字段之间是与的关系***/
struct SWherePara
{
int m_nConCnt;			//条件个数
const char** m_szFieldNames;  //条件涉及字段名组
int *m_pnFieldTypes;      	//条件涉及字段类型组
void **m_ppVals;			//条件涉及字段值组
};

/***SQL查询参数***/
struct SSelectPara
{
const char *m_szTblName;	//表名
//const char **m_szColNames;	//查询涉及的字段组名
SWherePara  m_sWherePara;	//查询条件参数
};

/***SQL删除参数***/
struct SDeletePara
{
const char *m_szTblName;	//表名
SWherePara  m_sWherePara;	//删除条件参数
};

/***SQL插入值参数***/
struct SValPara
{
int m_nFieldCnt;			//字段数
int *m_pnFieldTypes;		//字段类型组
void **m_ppVals;			//字段值组
};

/***SQL插入参数***/
struct SInsertPara
{
const char *m_szTblName;	//表名
SValPara    m_sValPara;		//插入值参数
};

/***SQL更新值参数***/
struct SSetPara
{
int m_nFieldCnt;			//字段数
const char **m_szFieldNames;	//字段名组
int *m_pnFieldTypes;		//字段类型组
void **m_ppVals;			//字段值组
};

/***SQL更新参数***/
struct SUpdatePara
{
const char *m_szTblName;	//表名
SSetPara    m_sSetPara;		//更新值参数
SWherePara  m_sWherePara;	//更新条件参数
};

class CRowSet;
class CRoRowSet;

/***数据库接口类***/
class CDatabase
{
public:
virtual CRowSet *queryCreate(SCreateTblPara *psCreateTblPara,SCreateIdxesPara *psCreateIdxesPara)=0;  //建表函数 
virtual void queryDrop(const char *szTableName)=0;	//删表函数
virtual CRowSet *querySelectForUpdate(SSelectPara *psSelectPara)=0;	//查询更新函数
virtual CRoRowSet *querySelect(SSelectPara *psSelectPara)=0;	      //查询函数
virtual void queryDelete(SDeletePara *psDeletePara)=0;	//删记录函数
virtual void queryInsert(SInsertPara *psInsertPara)=0;	//插记录函数
virtual void queryUpdate(SUpdatePara *psUpdatePara)=0;	//更新记录函数
virtual void checkForUnLock() = 0;                          //查锁解锁函数
};



/***行集类***/
class CRoRowSet
{
protected:
class CRoField
{
public:
virtual operator char() = 0;						//取字段函数
virtual operator unsigned char() = 0;				//取字段函数
virtual operator short() = 0;						//取字段函数
virtual operator unsigned short() = 0;				//取字段函数
virtual operator int() = 0;						//取字段函数
virtual operator unsigned int() = 0;				//取字段函数
virtual operator long() = 0;						//取字段函数
virtual operator unsigned long() = 0;				//取字段函数
virtual operator long long() = 0;					//取字段函数
virtual operator unsigned long long() = 0;			//取字段函数
virtual operator const char *() = 0;					//取字段函数
};
public:
virtual void 	destroy()	= 0;		//行集对象删除函数,行集使用完后一定要删除,否则造成内存泄露
virtual void 	resetRec() 	= 0;		//行集遍历函数,将遍历指针复位
virtual bool 	nextRec()  	= 0;		//函集遍历函数,将遍历指针指向下一条记录,注意要取第一条记录,在调用复位函数后必须调用此函数,才能取出第一条记录,记录集已遍历完后,将返回false,否则返回true
virtual bool 	prevRec()  	= 0;		//函集遍历函数,将遍历指针指向前一条记录,记录集已遍历完后,将返回false,否则返回true
virtual CRoField &  operator[](const char *szFieldName) = 0;	//记录访问函数
};

/***行集类***/
class CRowSet:public CRoRowSet
{
protected:
class CField:public CRoField
{
public:
virtual operator char() = 0;						//取字段函数
virtual operator unsigned char() = 0;				//取字段函数
virtual operator short() = 0;						//取字段函数
virtual operator unsigned short() = 0;				//取字段函数
virtual operator int() = 0;						//取字段函数
virtual operator unsigned int() = 0;				//取字段函数
virtual operator long() = 0;						//取字段函数
virtual operator unsigned long() = 0;				//取字段函数
virtual operator long long() = 0;					//取字段函数
virtual operator unsigned long long() = 0;			//取字段函数
virtual operator const char *() = 0;					//取字段函数
virtual void operator=(char nVal) 	 	= 0;			//设置字段函数
virtual void operator=(unsigned char nVal) 	= 0;		//设置字段函数
virtual void operator=(short nVal) 		= 0;			//设置字段函数
virtual void operator=(unsigned short nVal) = 0;		//设置字段函数
virtual void operator=(int  nVal) 	 	= 0;			//设置字段函数
virtual void operator=(unsigned int  nVal) 	= 0;		//设置字段函数
virtual void operator=(long nVal) 	 	= 0;			//设置字段函数
virtual void operator=(unsigned long nVal) 	= 0;		//设置字段函数
virtual void operator=(long long nVal)	= 0;			//设置字段函数
virtual void operator=(unsigned long long nVal)	= 0;		//设置字段函数
virtual void operator=(const char *pVal) 	= 0;			//设置字段函数
};
public:
virtual void 	destroy()	= 0;		//行集对象删除函数,行集使用完后一定要删除,否则造成内存泄露
virtual void 	resetRec() 	= 0;		//行集遍历函数,将遍历指针复位
virtual bool 	nextRec()  	= 0;		//函集遍历函数,将遍历指针指向下一条记录,注意要取第一条记录,在调用复位函数后必须调用此函数,才能取出第一条记录,记录集已遍历完后,将返回false,否则返回true
virtual bool 	prevRec()  	= 0;		//函集遍历函数,将遍历指针指向前一条记录,记录集已遍历完后,将返回false,否则返回true
virtual void 	clear()	= 0;		//行集记录删除函数,将行集所指向的数据库中记录删除
virtual void  	deleteRec()	= 0;		//删除当前记录函数
virtual void  	createRec() = 0;		//创建新记录函数
virtual CField &  operator[](const char *szFieldName) = 0;	//记录访问函数
};

CDatabase *getMdb(const char *szDbName);							//取数据库实例指针
void removeMdb(const char *szDbName);                           //卸载数据库

/****使用范例*****/
//int main()
//{
//	CDatabase *pcDatabase = getMdb();
//
//	SSelectPara sSelectPara;
//
//	sSelectPara初始化...
//
//	CRowSet &cRowSet = *(pcDatabase->querySelect(&sSelectPara));
//
//	cRowSet.resetRec();
//	while(cRowSet.nextRec())
//	{
//		cRowSet["UserId"] = 123;   //设置当前记录的UserId字段为123
//		int nUserId = cRowSet["UserId"];  //取当前记录的UserId字段
//	}
//	cRowSet.destroy();
//	return 0;
//}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -