[英]Data structures to implement unknown table schema in c/c++?
我们的任务是从文件中读取有关表架构的信息,在c / c ++中实现该表,然后在其上成功运行一些“选择”查询。 表架构文件可能包含这样的内容,
Tablename- Student
"ID","int(11)","NO","PRIMARY","0","".
现在,我的问题是什么数据结构适合该任务。 问题是我不知道一个表可能有多少列,既不知道这些列的名称是什么,也不清楚它们的数据类型。 例如,一个表可能只有一个int类型的列,另一表可能有15个不同数据类型的列。 实际上,我什至不知道模式文件可能具有其描述的表的数量。
我想到的一种方法是有一定数量的向量,例如20个向量(假设表中列的上限为20),将这些向量命名为1stvector,2ndvector等,将列的名称映射到向量,然后相应地使用它们。 但是,似乎所有这些if / else语句或switch case语句(用于映射)的代码都一团糟。
在谷歌搜索/堆栈溢出时,我了解到您无法在运行时描述类,否则该问题可能更容易解决。
任何帮助表示赞赏。 谢谢。
为了处理对数据列类型的了解,您几乎必须存储原始输入(即,建议使用std:string
),并在以后根据需要强制执行解释。
这还具有可以以相同类型存储列名的优点。
如果您确实想确定列类型,则需要推测性地解析输入的每一列,以查看可能的结果并在此基础上做出决策。
无论哪种方式,如果输入中可能包含带有列分隔符号的列(例如,字符串,否则用空格分隔的数据中包含空格),则您必须知道输入的引用约定并编写某种解析处理数据(在这里,用getline
吸收整行是您的朋友)。 您的输入似乎用双引号分隔的字符串用逗号分隔。
我建议使用std::vector
来保存所有表创建语句。 读完所有创建语句后,即可构造表。
要克服的问题是过多的列类型。 所有C ++容器都喜欢具有统一的类型,例如std::vector<std::string>
。 您将具有不同的列类型。
一种解决方案是让您的数据类型来自一个基数。 这样一来,您就可以在表的每一行使用std::vector<Base *>
,其中的指针可以指向不同{child}类型的字段。
我把剩下的交给OP去解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.