数据读取方法、装置、电子设备及存储介质与流程

文档序号:29799425发布日期:2022-04-23 19:43阅读:80来源:国知局
1.本技术涉及计算机
技术领域
:,特别涉及一种数据读取方法、装置、电子设备及存储介质。
背景技术
::2.随着计算机技术的发展,技术人员在进行开发工作时,常常需要在程序代码(例如c++代码)中调用数据库中存储的数据项,通常会利用dao(dataaccessobject,数据访问对象)工具来从数据库中访问这些数据项。3.针对通用化的dao工具而言,通常需要先建立c++中结构体的属性与库表(指数据库中的数据表)的字段之间的映射关系,这时需要通过dao工具编写复杂的c++代码,再基于编写的c++代码来读取库表中对应字段内存储的数据项。4.在上述过程中,一旦业务需要查询其他的数据项,在修改查询的功能逻辑时,需要整体修改dao工具所编写的脚本程序,然后重新基于修改后的脚本程序再生成一次c++代码,导致c++代码的扩展性较差、数据读取效率低且修改成本高。技术实现要素:5.本技术实施例提供了一种数据读取方法、装置、电子设备及存储介质,能够简化数据读取的繁琐流程、提升数据读取效率。该技术方案如下:6.一方面,提供了一种数据读取方法,该方法包括:7.获取待读取数据项所在数据表的目标表名;8.基于所述目标表名,获取所述数据表与目标程序的结构体之间的映射信息;9.基于所述映射信息,建立所述数据表与所述结构体之间的映射关系;10.基于所述映射关系,向所述目标程序中导入所述待读取数据项。11.一方面,提供了一种数据读取装置,该装置包括:12.第一获取模块,用于获取待读取数据项所在数据表的目标表名;13.第二获取模块,用于基于所述目标表名,获取所述数据表与目标程序的结构体之间的映射信息;14.建立模块,用于基于所述映射信息,建立所述数据表与所述结构体之间的映射关系;15.导入模块,用于基于所述映射关系,向所述目标程序中导入所述待读取数据项。16.在一些实施例中,所述映射信息包括所述结构体的源文件、头文件和公共头文件,所述源文件用于定义构建所述结构体中至少一个字段映射的函数,所述头文件用于声明所述结构体的数据格式,所述公共头文件用于定义全局初始化函数。17.在一些实施例中,所述建立模块用于:18.在初始化所述目标程序时,调用所述公共头文件的所述全局初始化函数,建立所述映射关系。19.在一些实施例中,所述第二获取模块包括:20.获取单元,用于获取所述结构体的至少一个字段与所述结构体的首地址之间的至少一个偏移量;21.创建单元,用于基于所述至少一个偏移量,创建所述目标表名与所述至少一个字段之间的映射表;22.确定单元,用于将所述映射表确定为所述映射信息。23.在一些实施例中,所述创建单元用于:24.对任一字段,基于所述任一字段的字段名、所述任一字段的字段类型以及所述任一字段与所述首地址之间的偏移量,创建目标三元组;25.以所述目标表名为键名、以所述目标三元组为键值,将所述键名与键值构成的键值对存储到所述映射表中。26.在一些实施例中,所述导入模块用于:27.根据结构化查询语句,从所述数据表中获取所述待读取数据项;28.根据所述映射关系,确定所述待读取数据项在所述结构体中对应的目标存储位置;29.将所述待读取数据项存储到所述目标存储位置中。30.在一些实施例中,所述装置还包括:31.设置模块,用于在创建所述结构体时,将所述结构体的第一个字段的字段名设为所述目标表名。32.一方面,提供了一种电子设备,该电子设备包括一个或多个处理器和一个或多个存储器,该一个或多个存储器中存储有至少一条程序代码,该至少一条程序代码由该一个或多个处理器加载并执行以实现如上述任一种可能实现方式的数据读取方法。33.一方面,提供了一种存储介质,该存储介质中存储有至少一条程序代码,该至少一条程序代码由处理器加载并执行以实现如上述任一种可能实现方式的数据读取方法。34.一方面,提供一种计算机程序产品或计算机程序,所述计算机程序产品或所述计算机程序包括一条或多条程序代码,所述一条或多条程序代码存储在计算机可读存储介质中。电子设备的一个或多个处理器能够从计算机可读存储介质中读取所述一条或多条程序代码,所述一个或多个处理器执行所述一条或多条程序代码,使得电子设备能够执行上述任一种可能实施方式的数据读取方法。35.本技术实施例提供的技术方案带来的有益效果至少包括:36.通过待读取数据项对应的目标表名,自动化的构建出该数据表与目标程序的结构体之间的映射关系,在运行目标程序时能够基于该映射关系导入待读取数据项,使得在修改查询的功能逻辑时无需整体修改目标程序,提升了目标程序的代码扩展性,大大降低了数据读取流程的修改成本,从而提高了数据读取效率。附图说明37.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还能够根据这些附图获得其他的附图。38.图1是本技术实施例提供的一种数据读取方法的实施环境示意图;39.图2是本技术实施例提供的一种数据读取方法的流程图;40.图3是本技术实施例提供的一种数据读取方法的流程图;41.图4是本技术实施例提供的一种数据读取装置的结构示意图;42.图5是本技术实施例提供的一种电子设备的结构示意图。具体实施方式43.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。44.本技术中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。45.本技术中术语“至少一个”是指一个或多个,“多个”的含义是指两个或两个以上,例如,多个第一位置是指两个或两个以上的第一位置。46.在介绍本技术实施例之前,需要引入一些云
技术领域
:内的基本概念:47.云技术(cloudtechnology):是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术,也即是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成云
技术领域
:的重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,均能通过云计算来实现。48.云存储(cloudstorage):是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。49.数据库(database):简而言之可视为一种电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。50.关系型数据库(relationaldatabase):是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表(也称为数据表、库表),一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。简而言之,关系型数据库是由多张能互相联接的二维行列表格组成的数据库,当前主流的关系型数据库包括oracle、db2、microsoftsqlserver、microsoftaccess、mysql等。51.本技术实施例涉及上述关系型数据库,关系型数据库中存储有多张数据表,数据表中的每一条记录(也即每一行)称为一个元组,数据表中的每个字段(也即每一列)称为一个属性,每个字段中存储的数据项称为属性值,每个字段的字段名(也即每一列的列名)称为属性名。52.库表(datatable):指数据库中的数据表,是数据库中结构化组织数据的单位,通过库表可以将同一逻辑下多维度的数据组织到一起。53.字段(field):一个库表中可以包括多个字段,每个字段代表一个库表中的单一维度数据,在二维表中一个字段对应于一列数据。54.结构化查询语言(structuredquerylanguage,sql):用于关系数据库管理和数据操作的标准计算机语言,sql用于在数据库中查询、插入、更新和修改数据。55.应用程序编程接口(applicationprogramminginterface,api):指一些预先定义的函数,提供应用程序与开发人员基于某软件或硬件以访问一组例程的能力。56.数据访问对象(dataaccessobject,dao):数据访问接口,提供从存储平台(也即数据库)抽象化访问数据的能力。57.图1是本技术实施例提供的一种数据读取方法的实施环境示意图。参见图1,在该实施环境中包括终端101和服务器102,终端101和服务器102均为一种电子设备。58.终端101用于运行目标程序,技术人员可以在编写目标程序的c++代码时,利用脚本工具自动化地将数据库查询结果集合导入到c++结构体中,也即实现待读取数据项的自动导入。59.终端101以及服务器102能够通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。60.服务器102用于向终端101提供存储平台,可选地,服务器102为单机设备,或者服务器102为具有主备结构的电子设备,或者服务器102为云数据库、分布式存储集群等,本技术实施例不对服务器102的类型进行具体限定。在一些实施例中,服务器102可以和终端101集成在同一物理机上。61.可选地,服务器102是独立的物理服务器,或者是多个物理服务器构成的服务器集群或者分布式系统,或者是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(contentdeliverynetwork,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。62.可选地,该终端101泛指多个终端中的一个,该终端101的设备类型包括:智能手机、平板电脑、电子书阅读器、mp3(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)播放器、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机、台式计算机、智能音箱或者智能手表中的至少一种。例如,终端101是笔记本电脑,或者其他便携式电子设备。63.本领域技术人员可以知晓,上述终端101的数量可以更多或更少。比如上述终端101可以仅为一个,或者上述终端101为几十个或几百个,或者更多数量。本技术实施例对终端101的数量和设备类型不加以限定。64.图2是本技术实施例提供的一种数据读取方法的流程图。参见图2,该实施例应用于电子设备,该实施例包括:65.201、电子设备获取待读取数据项所在数据表的目标表名。66.可选地,该电子设备在linux或者windows平台下运行,支持c++98及以上版本的编译器,该电子设备可以是台式计算机、笔记本电脑、平板电脑等电子设备。67.需要说明的是,该电子设备与服务器之间通过有线或无线网络进行通信连接,该服务器能够基于数据库提供数据访问接口,该数据库中存储有该待读取数据项所在的数据表。68.在一些实施例中,该电子设备上安装有目标程序,该目标程序为基于脚本语言编写的脚本程序,例如,该脚本语言为python时,该脚本程序为python3.0编译环境下运行的程序,在另一些实施例中,该目标程序是基于其他编程语言所编写的应用程序,例如,该其他编程语言包括js(javascript,一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言)、vbs(visualbasicscript,vb脚本语言)等,或者,该其他编程语言包括c、c++、c#等不依赖于脚本工具的计算机程序语言,本技术实施例不对目标程序的类型进行具体限定。69.在一个示例中,电子设备只需要引用deserialize_helper.h头文件并编译链接deserialize_helper.cpp源文件就可使用该目标程序,可选地,该目标程序运行于python3编译环境,在目标程序中设置提供数据库的服务器的ip地址(internetprotocoladdress,互联网协议地址)和通信端口,基于该目标程序与服务器建立数据连接后,在建立数据连接时,用户还可以向目标程序提供接入该服务器所需的用户名及密码,以便于服务器进行鉴权验证,在验证通过后向该目标程序开放对应的数据访问权限。70.在一些实施例中,用户向目标程序输入待读取数据项所在数据库的目标库名以及在该数据库中所在数据表的目标表名,可选地,用户基于命令行向目标程序输入目标库名和目标表名,在一个示例中,该命令行为./gen_bo.py—tablet_pay_list—dbia_exc_zwdb,其中,“—table”后面的参数“t_pay_list”是目标表名(以余额表为例),“—db”后面的参数“ia_exc_zwdb”是目标库名(以zw数据库为例),而“gen_bo.py”则是目标程序的程序名,在输入目标库名和目标表名后执行下述步骤202,以自动生成该数据表对应的结构体定义代码(也即下述步骤202中的映射信息)。71.202、电子设备基于该目标表名,获取该数据表与目标程序的结构体之间的映射信息。72.在一些实施例中,该映射信息包括该结构体的源文件、头文件和公共头文件,该源文件用于定义构建该结构体中至少一个字段映射的函数,该头文件用于声明该结构体的数据格式,该公共头文件用于定义全局初始化函数,该全局化初始函数用于归集源文件中定义的构建函数。73.需要说明的是,当目标程序对多个数据表(也即库表)生成多个结构体时,虽然一个数据表对应于一个结构体,但是只会生成一个公共头文件,也即是说,多个数据表的结构体共用同一个公共头文件,因此在公共头文件中定义一个全局初始化函数即可完成所有数据表与所有结构体之间映射关系的构建。74.在一些实施例中,电子设备可以先获取该结构体的至少一个字段与该结构体的首地址之间的至少一个偏移量,再基于该至少一个偏移量,创建该目标表名与该至少一个字段之间的映射表,最后将该映射表确定为该映射信息。75.可选地,电子设备可以通过调用一个c++宏函数#defineoffset(type,member)(size_t)&(((type*)0)-》member)来获取各个字段所对应的各个偏移量,在一个示例中,以用户表(user表)为例,user表至少包括下述字段:用户标识(identification,id)、用户名(name)、用户性别(sex)等,在不同应用场景下能够设置不同含义的字段,比如,在支付场景下增设用户余额字段,在考试场景下增设用户分数字段等,本技术实施例不对各个字段的数量及含义进行具体限定。76.在一些实施例中,对任一字段,电子设备基于该任一字段的字段名、该任一字段的字段类型以及该任一字段与该首地址之间的偏移量,创建目标三元组,以该目标表名为键名、以该目标三元组为键值,将该键名与键值构成的键值对存储到该映射表中。需要说明的是,该首地址是指结构体的首地址,也即结构体的第一个字段(即属性)的内存地址,换言之,由于内存中的存储单位是字节,各个字节具有各自的序列编号称为各个字节的内存地址,一个结构体在内存中会占用一段连续的存储空间(对应于一串连续的内存地址),在存储时会在该存储空间中按照顺序来排放结构体的各个字段(即各个属性),因此,第一个字段的内存地址与整个结构体的内存地址是相同的。77.在一个示例中,电子设备可以基于c++的原生map(图)结构来构建映射表,也即是说,电子设备对每个字段获取目标三元组《字段名,字段类型,对应属性的地址偏移量》之后,基于这些目标三元组,创建表名-《字段名,字段类型,对应属性的地址偏移量》的映射表,并以map结构来存储该映射表,其中,map结构是电子设备原生(native)库中支持的一种数据结构,以键值对的方式来存储数据,基于map结构构建映射表,是指将目标表名(一个字符串)作为键名(key),将目标三元组《字段名,字段类型,对应属性的地址偏移量》作为键值(value),从而将目标表名与各个字段的目标三元组进行对应存储,以构建上述映射信息。78.在上述过程中,单个目标表名可以对应多个字段信息(也即目标三元组),在每个字段信息中能够将字段名与结构体属性的地址偏移量绑定,结合属性地址偏移量和调用api函数时传入的结构体指针地址,即可定位到结构体中所有属性的存储地址,也即定位到结构体中所有字段的存储地址,从而便于自动化构建数据表与结构体之间的映射关系。79.203、电子设备基于该映射信息,建立该数据表与该结构体之间的映射关系。80.在一些实施例中,电子设备可以在初始化该目标程序时,调用该公共头文件的该全局初始化函数,建立该映射关系。该映射关系,是指远端数据库中的数据表与本地目标程序中创建的结构体之间的关联关系,例如,在云数据库中存储并维护多个user表,而本地目标程序需要调用目标用户的user表,则在本地创建结构体,并将结构体与云数据库中目标用户的user表关联,也即建立结构体与目标用户的user表之间的映射关系,只有在建立了映射关系后,才能保证目标程序能够顺利读取到云数据库中存放的各个待读取数据项。在一个示例中,将数据表的目标表名设置为结构体的类型名,将数据表中各个字段的字段名设置为结构体各个字段的字段名,使得数据表与结构体互相对应。81.可选地,如果待读取数据项分别存储在多个数据表中,此时电子设备可以对每个数据表都获取一个映射信息,且各个数据表的映射信息共同相同的公共头文件,这样能够在初始化时仅调用一次公共头文件,就对各个数据表均建立了映射关系,从而能够节约建立映射关系的时间。82.在一些实施例中,电子设备也可以为每个数据表的映射信息中添加各自的头文件,并在初始化过程中分别调用各自头文件中的局部初始化函数,从而建立各个数据表与对应结构体之间的映射关系,本技术实施例不对映射关系的建立方式进行具体限定。83.204、电子设备基于该映射关系,向该目标程序中导入该待读取数据项。84.在一些实施例中,电子设备可以根据结构化查询语句(查询sql语句),从该数据表中获取该待读取数据项,根据该映射关系,确定该待读取数据项在该结构体中对应的目标存储位置,将该待读取数据项存储到该目标存储位置中。可选地,查询sql语句直接嵌入在目标程序的程序代码中,从而在运行目标程序时能够执行该查询sql语句,并导入待读取数据项,可选地,通过命令行向目标程序输入查询sql语句,从而能够以外界传入的方式输入查询sql语句,并导入该待读取数据项。85.可选地,由于目标程序能够从用户的查询sql语句中解析出目标表名,但在调用api函数时传入的指针是空指针类型void*,无法通过void*指针来获取到这一指针所指示的结构体所对应的表名。有鉴于此,电子设备可以在创建该结构体时,将该结构体的第一个字段的字段名设为该表名,也即是说,将结构体的第一个属性设为结构体所对应的表名字符串。86.在上述过程中,由于c++结构体的属性内存分布顺序是与属性定义顺序相同的,因此该表名字符串的属性内存位置会被置于每个结构体的内存空间的首部,且表名字符串的属性的存储地址会与结构体的首地址相同,从而能够通过调用api函数时传入的空指针,直接读取到结构体内存空间中的第一个字符串(也即表名字符串),从而能够获取到该指针所指示结构体对应的表名。在获取到结构体对应的表名之后,如果该表名与查询sql语句指定的目标表名一致,那么将该结构体作为后续用于存放待读取数据项的数据结构。87.接下来,电子设备根据查询sql语句,从服务器中获取查询sql语句所指示的待读取数据项,这些待读取数据项可以构成一个查询结果集合(简称为查询结果集),查询结果集中查询结果值的顺序与查询sql语义中指定的字段名的顺序是一致的,因此通过解析查询sql语义得到将要获取到的字段名以及字段名顺序,根据映射表(也即映射信息)中字段名到属性地址的映射关系,可以按照顺序将查询结果集中的查询结果值填入到结构体的对应属性中,这样在向目标程序的结构体导入数据项时,能够达到自动化导入,无需用户付出额外的人工劳动,大大节约了开发成本。88.在一些实施例中,由于查询结果集中的查询结果值(也即待读取数据项)都是以字符串类型进行存储的,电子设备还可以根据映射表中字段到字段类型的映射关系(目标三元组中不止存储了字段还存储了字段类型),将待读取数据项转换为字段类型所指示的实际属性类型,达到更加智能、准确的数据导入效果。89.本技术实施例提供的方法,通过待读取数据项对应的目标表名,自动化的构建出该数据表与目标程序的结构体之间的映射关系,在运行目标程序时能够基于该映射关系导入待读取数据项,使得在修改查询的功能逻辑时无需整体修改目标程序,提升了目标程序的代码扩展性,大大降低了数据读取流程的修改成本,从而提高了数据读取效率。90.进一步地,由于仅利用目标表名即可自动化构建映射关系,相当于无需指定复杂的库表相关信息既能够完成映射关系的构建,此外在运行目标程序时无需传入额外的参数就能够进行数据读取,大大简化了繁琐的数据读取流程,且在多人协作场景下方便了技术人员之间互相检视对方的程序代码,降低了目标程序的程序代码的理解成本。91.上述所有可选技术方案,能够采用任意结合形成本公开的可选实施例,在此不再一一赘述。92.图3是本技术实施例提供的一种数据读取方法的流程图,请参考图3,该方法应用于电子设备,该方法包括下述步骤:93.301、电子设备获取待读取数据项所在数据表的目标表名。94.上述步骤301与上述步骤201类似,这里不做赘述。95.302、电子设备获取目标程序的结构体的至少一个字段与该结构体的首地址之间的至少一个偏移量。96.可选地,电子设备可以通过调用一个c++宏函数#defineoffset(type,member)(size_t)&(((type*)0)-》member)来获取各个字段所对应的各个偏移量。97.在一些实施例中,电子设备也可以调用其他的宏函数来获取上述各个偏移量,本技术实施例不对获取各个偏移量的方式进行具体限定。98.303、电子设备基于该至少一个偏移量,创建该目标表名与该至少一个字段之间的映射表。99.在一些实施例中,对任一字段,电子设备基于该任一字段的字段名、该任一字段的字段类型以及该任一字段与该首地址之间的偏移量,创建目标三元组,以该目标表名为键名、以该目标三元组为键值,将该键名与键值构成的键值对存储到该映射表中。100.在一个示例中,电子设备可以基于c++的原生map(图)结构来构建映射表,也即是说,电子设备对每个字段获取目标三元组《字段名,字段类型,对应属性的地址偏移量》之后,基于这些目标三元组,创建表名-《字段名,字段类型,对应属性的地址偏移量》的映射表,并以map结构来存储该映射表。101.在上述过程中,单个目标表名可以对应多个字段信息(也即目标三元组),在每个字段信息中能够将字段名与结构体属性的地址偏移量绑定,结合属性地址偏移量和调用api函数时传入的结构体指针地址,即可定位到结构体中所有属性的存储地址,也即定位到结构体中所有字段的存储地址,从而便于自动化构建数据表与结构体之间的映射关系。102.304、电子设备将该映射表确定为该数据表与目标程序的结构体之间的映射信息。103.在上述步骤302-304中,电子设备基于该目标表名,获取该数据表与目标程序的结构体之间的映射信息。在一些实施例中,除了以map结构存储映射表之外,还可以以哈希表、位图、数组等其他数据结构来存储映射表,从而构建具有不同数据结构的映射信息,本技术实施例不对映射信息的数据结构进行具体限制。104.可选地,该映射信息包括该结构体的源文件、头文件和公共头文件,该源文件用于定义构建该结构体中至少一个字段映射的函数,该头文件用于声明该结构体的数据格式,该公共头文件用于定义全局初始化函数。105.在一些实施例中,电子设备将上述映射表存入到结构体的源文件中,从而基于该映射表来实现对构建各个字段映射关系的函数的定义。106.305、电子设备基于该映射信息,建立该数据表与该结构体之间的映射关系。107.在一些实施例中,电子设备可以在初始化该目标程序时,调用该公共头文件的该全局初始化函数,建立该映射关系。108.可选地,如果待读取数据项分别存储在多个数据表中,此时电子设备可以对每个数据表都获取一个映射信息,且各个数据表的映射信息共同相同的公共头文件,这样能够在初始化时仅调用一次公共头文件,就对各个数据表均建立了映射关系,从而能够节约建立映射关系的时间。109.在一些实施例中,电子设备也可以为每个数据表的映射信息中添加各自的头文件,并在初始化过程中分别调用各自头文件中的局部初始化函数,从而建立各个数据表与对应结构体之间的映射关系,本技术实施例不对映射关系的建立方式进行具体限定。110.306、电子设备根据结构化查询语句,从该数据表中获取该待读取数据项。111.在上述过程中,电子设备根据查询sql语句,从服务器中获取查询sql语句所指示的待读取数据项,这些待读取数据项可以构成一个查询结果集合(简称为查询结果集)。112.307、电子设备根据该映射关系,确定该待读取数据项在该结构体中对应的目标存储位置。113.在上述过程中,电子设备通过解析查询sql语义得到将要获取到的字段名以及字段名顺序,根据映射表(也即映射信息)中字段名到属性地址的映射关系,可以确定出结构体中各个属性的属性地址(也即目标存储位置)。114.308、电子设备将该待读取数据项存储到该目标存储位置中。115.在上述过程中,由于查询结果集中查询结果值的顺序与查询sql语义中指定的字段名的顺序是一致的,因此通过解析查询sql语义得到将要获取到的字段名以及字段名顺序,根据映射表(也即映射信息)中字段名到属性地址的映射关系,可以按照顺序将查询结果集中的查询结果值填入到结构体的对应属性中,这样在向目标程序的结构体导入数据项时,能够达到自动化导入,无需用户付出额外的人工劳动,大大节约了开发成本。116.在一些实施例中,由于查询结果集中的查询结果值(也即待读取数据项)都是以字符串类型进行存储的,电子设备还可以根据映射表中字段到字段类型的映射关系(目标三元组中不止存储了字段还存储了字段类型),将待读取数据项转换为字段类型所指示的实际属性类型,达到更加智能、准确的数据导入效果。117.需要说明的是,由于目标程序能够从用户的查询sql语句中解析出目标表名,但在调用api函数时传入的指针是空指针类型void*,无法通过void*指针来获取到这一指针所指示的结构体所对应的表名。有鉴于此,电子设备可以在创建该结构体时,将该结构体的第一个字段的字段名设为该表名(也即目标表名),也即是说,将结构体的第一个属性设为结构体所对应的表名字符串。118.在上述过程中,由于c++结构体的属性内存分布顺序是与属性定义顺序相同的,因此该表名字符串的属性内存位置会被置于每个结构体的内存空间的首部,且表名字符串的属性的存储地址会与结构体的首地址相同,从而能够通过调用api函数时传入的空指针,直接读取到结构体内存空间中的第一个字符串(也即表名字符串),从而能够获取到该指针所指示结构体对应的表名。在获取到结构体对应的表名之后,如果该表名与查询sql语句指定的目标表名一致,那么将该结构体作为后续用于存放待读取数据项的数据结构。119.在上述步骤306-308中,电子设备基于该映射关系,向该目标程序中导入该待读取数据项。在一些实施例中,电子设备也可以通过其他的dao脚本工具来导入该待读取数据项,本技术实施例不对导入待读取数据项的方式进行具体限定。120.在上述过程中,对于用户输入的任一查询sql语句,服务器基于该查询sql语句返回一个查询结果集之后,能够基于该查询结果集,自动化将各个待读取数据项(相当于查询结果值)导入到c++结构体内,且通过目标程序(例如脚本工具)自动化构建出一个数据表字段与偏移量的逻辑映射关系,该偏移量是指结构体属性相对于结构体的首地址之间的偏移量,通过这一逻辑映射关系能够解决c++未运行时无法通过属性名或字段名定位到具体属性的问题,再通过解析查询sql语句,能够将查询结果集中各个待读取数据项填入到结构体的对应属性中,从而不仅能够支持全量查询场景,而且能够支持灵活地非全量查询场景,也大大地方便了代码评审工作。121.此外,除了查询sql代码之后不需要额外的输入参数,能够借助目标程序自动构建映射关系,使用方便且传入参数简单,与数据库查询深度解耦,不依赖于任何第三方库文件,用户能够方便地通过查询sql语句定制个性化的查询方案,例如添加错误报警、日志记录等,具有更高的灵活性、适用性和可移植性。122.在一些示例性场景中,当需求变更导致数据表的结构发生变动时,例如在数据表中增加或删除了字段,只需要调用目标程序重新生成一次该数据表对应的结构体定义相关文件,此外其他的代码逻辑完全无需修改,目标程序能够自动判断当前对应项目文件夹下的构建情况,从而适应性地变动需要修改的逻辑(例如在映射表中增加或删除某一属性的映射信息),从而对结构体头文件和源文件进行重新生成和替换,并对公共头文件进行自适应修改,使得增量变更十分方便。123.本技术实施例提供的方法,通过待读取数据项对应的目标表名,自动化的构建出该数据表与目标程序的结构体之间的映射关系,在运行目标程序时能够基于该映射关系导入待读取数据项,使得在修改查询的功能逻辑时无需整体修改目标程序,提升了目标程序的代码扩展性,大大降低了数据读取流程的修改成本,从而提高了数据读取效率。124.上述所有可选技术方案,能够采用任意结合形成本公开的可选实施例,在此不再一一赘述。125.图4是本技术实施例提供的一种数据读取装置的结构示意图,请参考图4,该装置包括:126.第一获取模块401,用于获取待读取数据项所在数据表的目标表名;127.第二获取模块402,用于基于该目标表名,获取该数据表与目标程序的结构体之间的映射信息;128.建立模块403,用于基于该映射信息,建立该数据表与该结构体之间的映射关系;129.导入模块404,用于基于该映射关系,向该目标程序中导入该待读取数据项。130.本技术实施例提供的装置,通过待读取数据项对应的目标表名,自动化的构建出该数据表与目标程序的结构体之间的映射关系,在运行目标程序时能够基于该映射关系导入待读取数据项,使得在修改查询的功能逻辑时无需整体修改目标程序,提升了目标程序的代码扩展性,大大降低了数据读取流程的修改成本,从而提高了数据读取效率。131.在一些实施例中,该映射信息包括该结构体的源文件、头文件和公共头文件,该源文件用于定义构建该结构体中至少一个字段映射的函数,该头文件用于声明该结构体的数据格式,该公共头文件用于定义全局初始化函数。132.在一些实施例中,该建立模块403用于:133.在初始化该目标程序时,调用该公共头文件的该全局初始化函数,建立该映射关系。134.在一些实施例中,基于图4的装置组成,该第二获取模块402包括:135.获取单元,用于获取该结构体的至少一个字段与该结构体的首地址之间的至少一个偏移量;136.创建单元,用于基于该至少一个偏移量,创建该目标表名与该至少一个字段之间的映射表;137.确定单元,用于将该映射表确定为该映射信息。138.在一些实施例中,该创建单元用于:139.对任一字段,基于该任一字段的字段名、该任一字段的字段类型以及该任一字段与该首地址之间的偏移量,创建目标三元组;140.以该目标表名为键名、以该目标三元组为键值,将该键名与键值构成的键值对存储到该映射表中。141.在一些实施例中,该导入模块404用于:142.根据结构化查询语句,从该数据表中获取该待读取数据项;143.根据该映射关系,确定该待读取数据项在该结构体中对应的目标存储位置;144.将该待读取数据项存储到该目标存储位置中。145.在一些实施例中,基于图4的装置组成,该装置还包括:146.设置模块,用于在创建该结构体时,将该结构体的第一个字段的字段名设为该目标表名。147.上述所有可选技术方案,能够采用任意结合形成本公开的可选实施例,在此不再一一赘述。148.需要说明的是:上述实施例提供的数据读取装置在读取数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,能够根据需要而将上述功能分配由不同的功能模块完成,即将电子设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据读取装置与数据读取方法实施例属于同一构思,其具体实现过程详见数据读取方法实施例,这里不再赘述。149.图5是本技术实施例提供的一种电子设备的结构示意图。在本实施例中,以电子设备为终端500为例进行说明,该终端500的设备类型包括:智能手机、平板电脑、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端500还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。150.通常,终端500包括有:处理器501和存储器502。151.可选地,处理器501包括一个或多个处理核心,比如4核心处理器、8核心处理器等。可选地,处理器501采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。在一些实施例中,处理器501包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器501集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器501还包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。152.在一些实施例中,存储器502包括一个或多个计算机可读存储介质,可选地,该计算机可读存储介质是非暂态的。可选地,存储器502还包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器502中的非暂态的计算机可读存储介质用于存储至少一个程序代码,该至少一个程序代码用于被处理器501所执行以实现本技术中各个实施例提供的数据读取方法。153.在一些实施例中,终端500还可选包括有:外围设备接口503和至少一个外围设备。处理器501、存储器502和外围设备接口503之间能够通过总线或信号线相连。各个外围设备能够通过总线、信号线或电路板与外围设备接口503相连。具体地,外围设备包括:射频电路504、显示屏505、摄像头组件506、音频电路507、定位组件508和电源509中的至少一种。154.外围设备接口503可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器501和存储器502。在一些实施例中,处理器501、存储器502和外围设备接口503被集成在同一芯片或电路板上;在一些其他实施例中,处理器501、存储器502和外围设备接口503中的任意一个或两个在单独的芯片或电路板上实现,本实施例对此不加以限定。155.射频电路504用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。射频电路504通过电磁信号与通信网络以及其他通信设备进行通信。射频电路504将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路504包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。可选地,射频电路504通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wirelessfidelity,无线保真)网络。在一些实施例中,射频电路504还包括nfc(nearfieldcommunication,近距离无线通信)有关的电路,本技术对此不加以限定。156.显示屏505用于显示ui(userinterface,用户界面)。可选地,该ui包括图形、文本、图标、视频及其它们的任意组合。当显示屏505是触摸显示屏时,显示屏505还具有采集在显示屏505的表面或表面上方的触摸信号的能力。该触摸信号能够作为控制信号输入至处理器501进行处理。可选地,显示屏505还用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏505为一个,设置终端500的前面板;在另一些实施例中,显示屏505为至少两个,分别设置在终端500的不同表面或呈折叠设计;在再一些实施例中,显示屏505是柔性显示屏,设置在终端500的弯曲表面上或折叠面上。甚至,可选地,显示屏505设置成非矩形的不规则图形,也即异形屏。可选地,显示屏505采用lcd(liquidcrystaldisplay,液晶显示屏)、oled(organiclight-emittingdiode,有机发光二极管)等材质制备。157.摄像头组件506用于采集图像或视频。可选地,摄像头组件506包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtualreality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件506还包括闪光灯。可选地,闪光灯是单色温闪光灯,或者是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,用于不同色温下的光线补偿。158.在一些实施例中,音频电路507包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器501进行处理,或者输入至射频电路504以实现语音通信。出于立体声采集或降噪的目的,麦克风为多个,分别设置在终端500的不同部位。可选地,麦克风是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器501或射频电路504的电信号转换为声波。可选地,扬声器是传统的薄膜扬声器,或者是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅能够将电信号转换为人类可听见的声波,也能够将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路507还包括耳机插孔。159.定位组件508用于定位终端500的当前地理位置,以实现导航或lbs(locationbasedservice,基于位置的服务)。可选地,定位组件508是基于美国的gps(globalpositioningsystem,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。160.电源509用于为终端500中的各个组件进行供电。可选地,电源509是交流电、直流电、一次性电池或可充电电池。当电源509包括可充电电池时,该可充电电池支持有线充电或无线充电。该可充电电池还用于支持快充技术。161.在一些实施例中,终端500还包括有一个或多个传感器510。该一个或多个传感器510包括但不限于:加速度传感器511、陀螺仪传感器512、压力传感器513、指纹传感器514、光学传感器515以及接近传感器516。162.在一些实施例中,加速度传感器511检测以终端500建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器511用于检测重力加速度在三个坐标轴上的分量。可选地,处理器501根据加速度传感器511采集的重力加速度信号,控制显示屏505以横向视图或纵向视图进行用户界面的显示。加速度传感器511还用于游戏或者用户的运动数据的采集。163.在一些实施例中,陀螺仪传感器512检测终端500的机体方向及转动角度,陀螺仪传感器512与加速度传感器511协同采集用户对终端500的3d动作。处理器501根据陀螺仪传感器512采集的数据,实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。164.可选地,压力传感器513设置在终端500的侧边框和/或显示屏505的下层。当压力传感器513设置在终端500的侧边框时,能够检测用户对终端500的握持信号,由处理器501根据压力传感器513采集的握持信号进行左右手识别或快捷操作。当压力传感器513设置在显示屏505的下层时,由处理器501根据用户对显示屏505的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。165.指纹传感器514用于采集用户的指纹,由处理器501根据指纹传感器514采集到的指纹识别用户的身份,或者,由指纹传感器514根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器501授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。可选地,指纹传感器514被设置终端500的正面、背面或侧面。当终端500上设置有物理按键或厂商logo时,指纹传感器514能够与物理按键或厂商logo集成在一起。166.光学传感器515用于采集环境光强度。在一个实施例中,处理器501根据光学传感器515采集的环境光强度,控制显示屏505的显示亮度。具体地,当环境光强度较高时,调高显示屏505的显示亮度;当环境光强度较低时,调低显示屏505的显示亮度。在另一个实施例中,处理器501还根据光学传感器515采集的环境光强度,动态调整摄像头组件506的拍摄参数。167.接近传感器516,也称距离传感器,通常设置在终端500的前面板。接近传感器516用于采集用户与终端500的正面之间的距离。在一个实施例中,当接近传感器516检测到用户与终端500的正面之间的距离逐渐变小时,由处理器501控制显示屏505从亮屏状态切换为息屏状态;当接近传感器516检测到用户与终端500的正面之间的距离逐渐变大时,由处理器501控制显示屏505从息屏状态切换为亮屏状态。168.本领域技术人员能够理解,图5中示出的结构并不构成对终端500的限定,能够包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。169.在示例性实施例中,还提供了一种计算机可读存储介质,例如包括至少一条程序代码的存储器,上述至少一条程序代码可由电子设备中的处理器执行以完成上述实施例中数据读取方法。例如,该计算机可读存储介质包括rom(read-onlymemory,只读存储器)、ram(random-accessmemory,随机存取存储器)、cd-rom(compactdiscread-onlymemory,只读光盘)、磁带、软盘和光数据存储设备等。170.在示例性实施例中,还提供了一种计算机程序产品或计算机程序,包括一条或多条程序代码,该一条或多条程序代码存储在计算机可读存储介质中。电子设备的一个或多个处理器能够从计算机可读存储介质中读取该一条或多条程序代码,该一个或多个处理器执行该一条或多条程序代码,使得电子设备能够执行以完成上述实施例中数据读取方法。171.本领域普通技术人员能够理解实现上述实施例的全部或部分步骤能够通过硬件来完成,也能够通过程序来指令相关的硬件完成,可选地,该程序存储于一种计算机可读存储介质中,可选地,上述提到的存储介质是只读存储器、磁盘或光盘等。172.以上所述仅为本技术的可选实施例,并不用以限制本技术,凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1