📄 mdbapi.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 + -