星空网 > 软件开发 > 数据库

从零开始实现一个最简单的数据库_Step3:Record

模式(Schema)做好后,接下来就是实际的数据了。也就是表(Table)和记录(Record)。先从记录开始吧。

记录,也就是表中的一行数据。这里有个难点,就是表的模式是不定的,其属性的个数、值类型都是动态的,所以怎么样能在记录中保存[数量、类型不定的值]呢?这里我用的是保存指针的方法,也就是:Record中实际保存的是指针的列表,然后这些指针指向了实际要保存的数值;同时,这些指针在保存时都以DWORD*的类型保存,而Record中提供了GetPrptyType(int nPrptyIndex)函数用以获得该指针的实际类型。

下面上代码吧。

 

// LzjTable中的一行// 对于可变长度的属性(如LString),自动以4字节对齐方式进行填充class LzjRecord{public:	LzjSchema	*m_pSchema;	// 本LzjRecord所用的模式。外生变量:即,直接复制调用方的对象指针到本对象的相应成员变量中,由调用方维护本对象(此处为m_pSchema)的生命周期//	DWORD	*m_pdwData;//	LList<DWORD*>	m_pPrptyList;	// 本LzjRecord的属性	LPDWORD	*m_pValueList;	// [本数组中的每个元素]均指向一个属性。因为属性的类型不同,所以只能以LPDWORD来作为属性的指针,然后通过GetPrptyType()来获得该属性的具体类型。内生变量:即,将调用方的对象复制到本对象的相应成员变量中,由本父对象(此处为LzjRecord)维护本对象(此处为m_pValueList[])的生命周期public:	LzjRecord();	LzjRecord(LzjSchema *pSchema);	~LzjRecord();	void	Init(LzjSchema *pSchema);	// 由pSchema初始化:m_pSchema和m_pValueList	void	SetPrpty(int nPrptyIndex, DWORD *pdwValue);	// 设置第nPrptyIndex(从0起)个参数的值。生成内生变量	LPDWORD	GetPrpty(int nPrptyIndex);	LzjProperty::LP_ValueType	GetPrptyType(int nPrptyIndex);	// 获得属性类型	void	ConsoleOut(std::ostream *pCout);	DWORD	Serialize(LFile *pFile);	// 序列化	DWORD	Unserialize(LFile *pFile);	// 反序列化};

  




原标题:从零开始实现一个最简单的数据库_Step3:Record

关键词:数据库

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

阿里巴巴跨境专供(1688跨境专供):https://www.ikjzd.com/w/1573201827311902722
9710(跨境电商B2B直接出口):https://www.ikjzd.com/w/1573201828590821377
9810(跨境电商出口海外仓):https://www.ikjzd.com/w/1573201829354528770
跨境电子商务协会:https://www.ikjzd.com/w/1573201834647740417
跨鲸科技:https://www.ikjzd.com/w/1573201839823167490
跨境桥:https://www.ikjzd.com/w/1573201843787128833
十月北方旅游最佳去处?:https://www.vstour.cn/a/365184.html
缅甸电子签证口岸 缅甸电子签证在线申请:https://www.vstour.cn/a/365185.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流