一种通用数据库访问中自动适配对象的方法_2

文档序号:9200399阅读:来源:国知局
(1)用户数据字典:包括用户名、用户ID和用户下的表和视图的总数目;
[0043] (2)表或视图数据字典:包括表名或视图名、用户的ID、表或视图ID、表或视图的 字段数目、表的主键字段数目和表的主键字段的索引(由表的主键字段ID组成);
[0044] (3)字段数据字典:包括字段名、用户ID、表或视图ID、字段ID、字段类型和字段长 度。
[0045] 数据字典中的字段类型是与数据库字段类型对应的编程语言中的类型,数据库字 段类型中的整数对应编程语言的整数、浮点数对应浮点数、字符串对应字符数组、时间对应 时间结构体、二进制大字段对应由一个长度字段和一个指针组成的结构体,字段数据字典 中的字段长度为编程语言中的数据类型长度。这样根据数据字典就可以自动生成编程语言 的数据结构,特别强调的是编程语言的数据结构定义中设置字节对齐方式为单字节对齐, 以便于按字节存取。
[0046] 2.数据库访问请求自动适配对象
[0047] 假设:用户U有一张数据库表T有m个字段,字段ST1J2,…,T m,Tm为二进制大字 段,其他字段为数据库普通字段类型,如图3所示,根据数据字典生成的编程语言数据结构 为S,S的数据成员分别为S1, S2,…,Sm,用户U的数据字典为Du,表T的表数据字典为Dt, 字段T1, T2,…,Tn^字段数据字典分别为Dt i,Dt2,…,Dtm,字段数据字典Dt1, Dt2,…,Dtj 字段T1, T2,…,Tm的字段长度为L1, L2,…,Lm,数据结构S的长度为L,根据"1.数据库表与 编程语言数据结构的对象化"中设计
[0048] 数据库访问请求中带入泛化后的S的对象指针Ps(即无名指针,不知道是S的对 象指针)并指定了要操作用户U的表T,将数据库访问请求自适应对象的方法为,通过用户 名U找到该用户的数据字典Du,然后再根据表名找到表的数据字典Dt,接着可以获取表T 的字段T1, T2,…,Tm的字段字典Dt i,Dt2,…,Dt,L1, L2,…,Lm即为数据结构S中的m个成员 的数据长度,那么Ps起始地址的L个字节即为Ps指向的对象,根据成员长度L1, L2,…,Lm按位读取Ps即可获取Ps指向的类型为S的对象的成员S1, S2,…,Sm的值,即将地址Ps~ Ps+L$ S满值,地址Ps+L广Ps+L# S 2的值,依此类推,地址Ps+EG)lLi~Ps+Lni为Sn^ 值,将S1, S2,…,Sm与字段T i,T2,…,T1^配即可实现数据库访问请求中编程语言数据结构 与数据库表结构自动适配。
[0049] 特殊说明,二进制大字段Tm的长度为S 4个字节,假定为N,接下来的4个字节 指向地址起始的的N个字节即为Tm的值。
[0050] 3.数据库查询结果自动适配对象
[0051] 当数据库请求为查询请求时,需要将数据库查询到每条记录转换成编程语言的数 据结构格式,下面同样以"2.数据库访问请求自动适配对象"中的假设条件作为本节的假设 条件,假设查询所有字段的内容,泛化的指针Po为查询结果起始地址,将查询结果转化为 编程语言数据结构即为将查询到的字段T1, T2,…,Tm的值转换成S的对象指针Po数据成员 S1, S2,…,S,过程。
[0052] 同"2.数据库访问请求自动适配对象"中方法一样获知到表T的字段T1, T2,…,Tm的字段字典Dt1,Dt2,…,Dt、输出结果数据类型为S、以及其对应的编程语言数据结构S的成 员S1, S2,…,Sm的数据长度,L1, L2,…,Lm,依次提取数据库中字段T1, T2,…,Tm值并将其按 位赋给起始地址为Po的地址,将Po起始的地址分为m份,每份的长度依次为L1, L2,…,Lm, 将Tii (0〈i〈 = m)的值存在第i个单元即实现了数据库查询结果自动适配编程语言数据结 构对象。
[0053] 特殊说明,与Lm对应S的数据成员S m的前4个字节存储二进制大字段Lm的结果 长度,Sm的接下来的4个字节指向的地址存MLm的值。另外,查询表T的个别字段的查询 结果自动适配对象方法与查询全部类似,假设表T的成员Ti (0〈i〈 = m)没有被查询,则只 需要进行查询结果对象化时跳过Ti字段的长度L i即可。
[0054] 实施例1
[0055] 下面结合附图,对本发明的应用,进行详细说明。
[0056] 图1、图2和图3展示了数据库表与编程语言数据结构的对象化过程,图1中描述 了用户数据字典、表或视图数据字典和字段数据字典的关联关系,根据图1可知通过用户 名、表名或视图名即可以得到该用户下指定表或视图数据字典和字段数据字典,根据这些 数据字典即可得到图2和图3 ;图2描述了数据库表结构中字段与编程语言数据结构的数 据成员的对象化映射关系(视图的字段与编程语言数据结构的数据成员的对象化映射关 系与此类似,此处及下文不再赘述),图3描述了编程语言数据结构的存储结构,根据图2和 图3即可实现数据库表的记录值与编程语言数据结构的对象的自动适配。
[0057] 步骤1-1,根据数据库的数据目录提取数据库的用户数据字典;
[0058] 步骤说明:根据数据库的数据目录,查询数据库下所有用户,获取所有用户的数据 字典,用户数据字典包括用户名、用户ID和用户下表和视图的总数目;
[0059] 步骤1-2,根据数据库的数据目录提取数据库的表或视图数据字典,并将其与用户 数据字典关联;
[0060] 步骤说明:根据数据库的数据目录,查询每个用户下所有表和视图,获取每个用户 下的所有表和视图的数据字典,表或视图数据字典包括表或视图名、表或视图ID、用户ID、 表或视图的字段数目、表的关键字数目(视图无关键字)和表的关键字索引(视图无关键 字索引),根据用户ID与用户数据字典关联;
[0061] 步骤1-3,根据数据库的数据目录提取数据库的字段数据字典,并将其与表或视图 数据字典关联;
[0062] 步骤说明:根据数据库的数据目录,查询每个表或视图下所有字段,获取每个用户 下的所有表和视图的字段数据字典,字段数据字典包括字段名、字段ID、表或视图ID、用户 ID、字段类型和字段长度,根据表或视图ID与表或视图数据字典关联,进而通过用户ID与 用户数据字典关联;
[0063] 步骤1-4,根据数据库的表或视图数据字典和字段数据字典,以及数据库字段类型 与编程语言数据类型的对应关系,生成与数据库对象对应的编程语言数据结构。
[0064] 步骤说明:通过图2中对应关系生成编程语言中与数据库对象对应的数据结构, 通过图3实现数据库表与编程语言数据结构的对象化。
[0065] 实施例2
[0066] 图4展示了数据库访问请求自动适配对象的流程,假设访问的数据库表为表T (视 图的操作与表相同,此处不再赘述),与表T对应的编程语言数据结构为S,具体说明如下:
[0067] 步骤2-1,根据编程语言数据对象构建数据库访问请求;
[0068] 步骤说明:根据图2创建与表T对应的编程语言数据结构S的编程语言数据对象, 并对需要操作的数据库表字段对应S的对象成员进行赋值,并提供对表T的访问说明,如表 T所在的数据库用户名、表名(即表T)、操作类型(插入、查询、删除和修改)、表T的字段操 作类型(如输入字段、输出字段、条件字段、条件兼输入字段、条件兼输出字段等),将编程 语言数据对象泛化为一个匿名数据块(只提供长度,不提供类型)与对表T的访问说明一 起作为数据访问请求的输入。
[0069] 步骤2-2,根据数据库访问请求中的数据库用户名、表名查询数据字典;
[0070] 步骤说明:根据步骤2-1中提供的数据库用户名和表或视图名称查询系统加载的 数据字典(数据字典由"实施例1"生成)。
[0071] 步骤2-3,获取到指定用户、指定表或视图以及表或视图所有字段的数据字典;
[0072] 步骤说明:根据指定的用户名、表(即表T)从系统加载的数据字典中获取到表T 的表数据字典和表T下属字段的字段数据字典以及表T所属用户的用户字典。
[0073] 步骤2-4,根据数据字典编码编程语言数据对象,使数据库访问请求泛化;
[0074] 步骤说明:根据查询到的数据字典(如图1描述)复原表T与对应编程语言数据 结构S(如图2所示)的对应关系和编程语言数据结构每个成员的类型和成员长度(如图 3所示),根据图3中数据结构S的存储描述按字节读取即可获取每个成员的值,然后根据 数据字典对2-1中的数据访问请求进行编码,即:使用用户ID标识访问的数据库用户,使用 表1D标识访问的表T,使用字段ID标识访问的表T的字段,将编程语言数据结构的每个成 员的值编码为"类型-长度-值"的形式,从而使数据库访问请求泛化为统一的请求。
[0075] 步骤2-5,将泛化后的数据库访问请求中的编程语言数据对象还原,获取到每个成 员
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1