初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
源码指引:github源码指引_初级代码游戏的博客-CSDN博客
本专题:基于共享内存的内存数据库_初级代码游戏的博客-CSDN博客
从这里开始顺序阅读:一个基于共享内存的内存数据库:1 介绍-CSDN博客
目录
一、源码指引
二、配置环境变量和INI文件
三、程序信息(日志)
四、异常
五、函数参考
一、源码指引
本源码位于ctfc项目(见我的github)的shmdb目录:
shmfc目录是依赖的共享内存基础功能, VirtualDB是用到的几个接口的定义。
包含共享内存数据库功能只需要引入shm_DB.h,使用内置的管理功能则引入shm_DBMgr.h。
此目录编译运行即为管理程序,里面包含一些内置测试功能。
二、配置环境变量和INI文件
配置环境变量“MY_STD_ENV”指向INI文件。
INI文件为文本文件,基本格式为:
//注释
[节]
变量=值
使用共享内存数据库所需的配置为:
[SHM_CONFIG]
default.SHM_DB_COLUMN_DEF=100
default.SHM_DB_INDEX_DEF=100
default.SHM_DB_STRING_POOL=1000000
default.SHM_DB_STRING_POOL#=1000000
default.SHM_DB_DATA=1000000
default.SHM_DB_INDEX=1000000
其中值可根据需要修改,仅用做初次创建时的共享内存大小,随着数据量增加会自动扩展。自动扩展会降低性能,因此最好设置较大的初始大小。
三、程序信息(日志)
本系统采用了可缓存的日志系统来记录日志信息,可以关闭日志输出而仅缓存日志,然后在必要时可以查看缓存的日志。
- 关闭日志输出“theLog.setOutput(false);”
- 设置缓存字节大小“theLog.setCache(10240);”
- 获得缓存的日志(同时会清除缓存)“theLog.GetCachedLog(str)”
四、异常
本系统可能抛出异常,异常类型为“int”、“char const *”、“string”、“exception”或“exception_my”。
五、函数参考
bool LoadTable(char const * tablename,char const * PK)从数据库加载表,同时创建PK,PK的多个列用逗号分隔
bool CreateIndex(char const * tablename,char const * indexname,char const * _key_cols)创建索引
bool DropIndex(char const * tablename,char const * indexname)删除索引,不能删除PK
bool DropTable(char const * tablename)删除表,包括所有索引
CRecordSet的功能:
bool Open(bool CanUpdate, char const * table,char const * index,CColumnDataS const * values=NULL,char const * type="=")打开记录集,values提供查询参数,参数必须符合索引顺序,可以是部分索引,type可以是=、>、<、>=、<=,不提供参数返回全索引
bool Requery()用相同的参数重新查询
bool MoveNext()移动到下一条记录
//edit/addnew -> SetFieldValue ->update
//增加不导致当前位置的变化,编辑完毕将导致当前记录指向下一个,如果编辑的是第一个,则开始位置也指向下一个(因为编辑过后可能不再处于索引中)
//即编辑过程可以不断地edit而不需要movenext,但是除非requery否则不能再回到编辑过的记录,编辑会同步更新所有索引
bool Edit()开始编辑当前记录
bool AddNew()开始增加新记录
bool SetFieldValue(char const * column,CColumnData const & value)设置字段的值
bool Update()完成编辑或增加
void Delete()删除当前记录,并移动到下一条,同步删除所有索引
bool isEOF()是否记录集结束
long GetColumnCount()获得列的个数
CColumnData GetColumnData (int i)获得列数据
string GetColumnName(int i)获得列的名字
COLUMN_TYPE GetColumnType(int i)获得列的类型
bool Close()关闭记录集
(未完待续)