一种数据库访问方法及中间件与流程

文档序号:13619740阅读:388来源:国知局
本发明涉及数据处理领域,尤其涉及一种数据库访问方法及中间件。
背景技术
:关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言sql就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。在传统的系统开发当中,开发人员是在代码中写入完整的sql语句。换言之,就是将数据库中的表名、字段名、数据操纵语言(datamanipulationlanguage,dml)语句或是作为限制条件的关键词写成一个常量字符串,然后把常量字符串写死在代码里。如图1所示,对关系型数据库进行操作的代码实现往往由不同的程序员根据不同的业务需要自行书写sql语句,并通过数据库访问驱动或中间件等方式将sql语句嵌入到访问代码中,这些sql语句以及代码分别由不同的程序员来编码实现,从而造成工作重复,导致开发效率低,另外因为程序员的业务能力不同导致sql语句良莠不齐,所以程序出错率高。技术实现要素:本发明实施例提供一种数据库访问方法及中间件,用以解决目前程序员访问数据库的开发工作重复,开发效率低的问题。本发明方法包括一种数据库访问方法,该方法包括:接收应用程序发送的关于通用函数接口的调用请求,所述调用请求中包括访问目标数据库的参数信息;根据所述参数信息,确定与所述参数对应的访问数据库的指令,所述指令包含于所述通用函数接口的命令语句中;解析所述指令,并根据所述指令的解析结果执行对目标数据库的访问操作;将所述的访问操作的执行结果发送给所述应用程序。基于同样的发明构思,本发明实施例进一步地提供一种用于数据库访问的中间件,包括:接收单元,用于接收应用程序发送的关于通用函数接口的调用请求,所述调用请求中包括访问目标数据库的参数信息;确定单元,用于根据所述参数信息,确定与所述参数对应的访问数据库的指令,所述指令包含于所述通用函数接口的命令语句中;执行单元,用于解析所述指令,并根据所述指令的解析结果执行对目标数据库的访问操作;发送单元,用于将所述的访问操作的执行结果发送给所述应用程序。本发明实施例通过提供一种用于数据库访问的中间件,其它应用程序需要访问底层数据库的数据时,就会通过该中间件提供的通用函数接口向目标数据库发出访问请求,其中通用函数接口中封装了用于数据库访问的指令,即sql语句等,然后中间件通过执行通用函数接口中的命令语句,确定用于访问数据库的指令,然后解析指令,从而执行对目标数据库的访问操作,然后将访问结果发送给应用程序,可见,通过这一方法就可以避免每个开发人员在进行业务需求开发时,各自开发访问数据库的代码,从而利用统一的中间件实现了数据库访问的功能,提高了开发效率,而且也降低了代码了出错率。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为现有技术提供一种对关系型数据库访问的开发流程示意图;图2为本发明实施例提供一种数据访问方法流程示意图;图3为本发明实施例提供一种对关系型数据库访问的开发流程示意图;图4为本发明实施例提供一种用于数据访问的中间件的架构示意图。具体实施方式为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。参见图2所示,本发明实施例提供一种数据访问方法流程示意图,具体地实现方法包括:步骤s101,接收应用程序发送的关于通用函数接口的调用请求,所述调用请求中包括访问目标数据库的参数信息。步骤s102,根据所述参数信息,确定与所述参数对应的访问数据库的指令,所述指令包含于所述通用函数接口的命令语句中。步骤s103,解析所述指令,并根据所述指令的解析结果执行对目标数据库的访问操作。步骤s104,将所述的访问操作的执行结果发送给所述应用程序。因为传统地松散的任务分配机制,访问数据库的代码因为业务需求不同而拆分给每个不同的开发人员,每位开发人员各自均需要编写相关的访问数据库的代码,导致开发效率低下,而且还容易出错,因此本发明实施例通过将与数据库相关的访问代码和其它业务逻辑代码进行剥离,人为开发一个用于数据库访问的中间件,这个中间件专用于实现了访问数据库的功能,供开发人员调用。之所以可以开发一个中间件实现上述功能,是因为从目标数据库的数据字典中转化为目标语言中的对应的数据结构类型,这部分功能实现可以按照设定规则自动化生成,进而减少人工失误;而中间件使用到的预设的sql语句模板又可以由专业的dba进行设计与把控,杜绝引入低效率语句的可能;而开发人员在开发其它业务需求代码时只需调用关于目标数据库的标准化的数据结果与通用函数接口,就可以访问目标数据库,而不必关注数据库访问的具体实现。因为本发明实施例提供了一种用于数据库访问的中间件,所以当开发人员在开发过程中发现其它应用程序需要访问目标数据库时,就可以调用这个中间件,当应用程序调用了中间件提供的通用函数接口时,就会运行该中间件,运行通用函数接口的命令语句过程中会执行至被封装的访问数据库的指令,然后解析访问数据库的指令,就会得到该指令对应的任务的执行结果,也就是对目标数据库的操作结果,该中间件将该操作结果返回给应用程序,从而使得该应用程序通过中间件实现从目标数据库中获取到相应的资源或服务。如访问操作为查询数据库中某类型的数据时,则操作结果为查询到相应类型的数据,并将查询到的相应类型的数据返回给该应用。由于在通用函数接口中封装了对数据库执行不同操作的指令,例如打开数据库、关闭数据库等指令,应用程序调用通用函数接口时,会将相应的查询条件作为通用函数接口的参数传入中间件,触发实现对数据库的相应地操作,从而无需根据对数据库的不同操作开发实现不同业务的应用,避免了应用程序与数据库的强耦合。另外当底层数据库中的数据表发生改变时,只需对中间件中的数据结构类型进行修改,而无需重新开发相应的应用程序,从而大大减少了开发应用程序所带来的工作量。具体地,用于数据库访问的中间件的实现方法是利用预设的sql语句模板生成访问数据库的指令;针对任一个目标数据库,获取所述目标数据库表格的数据结构信息,并根据所述目标数据库表格的数据结构信息创建与目标开发语言对应的数据结构类型;利用所述目标数据库的预设的sql语句模板生成所述目标数据库对应的数据库访问指令;通过目标开发语言将各目标数据库对应的访问数据库的指令和创建的各目标数据库表格的数据结构类型封装生成通用函数接口,其中,所述通用函数接口用于修改或者查询所述目标数据库。本发明实施例提供的用于数据库访问的中间件的实现方法支持多种编程语言与多种关系数据库,为方便介绍,本文以目标数据库是oracle数据库,目标语言是c语言为例详细说明。因为只有将数据库中数据字典转化为目标语言自有的数据结构,才能够方便使用目标语言对相关的数据进行逻辑上的处理,因此本发明实施例按照统一的转换规则对目标数据库中表格中的数据结构信息进行标准化的转换,表一是oracle数据库的部分结构信息与unixc(64位系统)数据结构类型转换规则。表一oracle数据库的数据结构信息c语言对应的数据结构类型numble(1)~numble(4)shortnumble(5)~numble(9)longnumble(10)~numble(18)longlongnumble(15,15)~numble(15,1)doublevarchar2char*当把目标数据库表格中数据结构信息进行转换之后,应用程序就可以利用通用函数接口向中间件发送关于目标数据库的访问请求,例如利用ptrdefopen接口向中间件发送关于目标数据库的访问请求,ptrdefopen接口函数的部分实现代码如下:中间件接收访问请求触发执行上述ptrdefopen接口的命令语句,进而对函数接口中各条语句进行语法分析,确定各条语句之间的执行逻辑顺序。其中,执行逻辑顺序也可以理解为每条语句的执行先后顺序,以及每条语句执行的条件信息。例如,某条语句需要在另外一种语句执行后才可以执行,或者当满足某种条件下,才可以执行该语句,例如,在上述代码中,db_curfrom3作为应用程序调用通用函数接口ptrdefopen(db_curfrom3,9999,0,0,“”)的参数传入,因此就会执行casedb_curfrom3,而不会执行其它case条件语句下面的语句。而且由于casedb_curfrom3之后的各条语句中均包含有标识执行顺序的标识信息,如语句中存在包含if或者where的语句时,则表示在执行该语句之前的sql语句后,如果满足该if或where中设定的条件,才可以执行该条语句。因此,通过对各条语句的语法进行分析,依据各个语句中的标识执行逻辑顺序的条件标识等信息,便可以确定出各条语句之间的执行逻辑关系。在上述代码中,db_curfrom3作为应用程序调用通用函数接口ptrdefopen(db_curfrom3,9999,0,0,“”)的参数传入,同时还传入其它数据库表格的索引信息,例如银行编号“9999”等。当中间件接收到应用程序利用通用函数接口发送的关于目标数据库的访问请求之后,就会执行该通用函数接口ptrdefopen的命令语句,其中casedb_curfrom3之后的命令语句是访问数据库的指令,即高效sql语句,通过解析这些高效sql语句就可以执行对目标数据库的访问操作,比如上述代码就实现打开目标数据库中的银行卡号表格。除了上述示例中的用于打开数据库表格的通用函数接口ptrdefopen,还有用于获取目标数据库中数据的ptrdeffetch函数,以及用于关闭目标数据库的ptrdefclose函数,应用程序通过中间件提供的这三个api就可以实现对目标数据库的访问操作。进一步地,为了方便应用程序对目标数据库中的数据字典进行操作,本发明实施例的中间件进一步地提供用于对目标数据库中数据进行新增、修改和删除的函数接口,例如如下函数接口定义:/***新增函数接口***/inttrdefinsert(trdef_tdef*pttbltrdef);/***修改函数接口***/inttrdefupdate(trdef_tdef*pttbltrdef,trdefflag_tdef*pttbltrdefflag);/***删除函数接口***/inttrdefdelete(trdef_tdef*pttbltrdef);进一步地,对目标数据库进行数据结构转换,封装生成上述通用函数接口之后,将创建的各目标数据库表格的数据结构类型和生成的通用函数接口保存在目标语言对应的头文件中;将生成所述通用函数接口的命令语句进行编译,得到关于所述目标开发语言的数据库访问库文件;将所述数据库访问库文件和所述头文件进行打包,将打包生成的文件包发送给应用程序,以便应用程序利用所述文件包调用通用函数接口。例如,将trdef_tdef对应的结构体和上述提到的函数接口存储在文件名为trdef.h的头文件中,并将上述函数接口的实现代码存储在文件名为tbl_trdef.c的文件中,然后对这些文件进行编译生成头文件和库文件,将这些编译后的文件打包生成文件包,然后将文件包发送给应用程序,应用程序就可以直接调用头文件中函数接口对数据库进行访问,进而,当开发机制是
背景技术
中的任务分配机制时,因为文件包被共享给各个开发人员,所以开发人员将使用统一的数据结构与数据库访问api进行编码操作,如图3所示,不再涉及到数据库访问相关代码的实现。进一步地,因为目前数据库类型主要有oracle、db2、mysql、sqlserver、达梦等,不同类型数据库的sql语句有一定的差异,那么,调用不同的数据库往往需要不同的sql语句,本发明实施例将各类数据库的sql语句进行统一封装,实现各类数据库共用一个接口。为了控制最后生成的库文件的大小,本发明实施例进一步引入配置文件,引入配置文件之前应用程序必须连接数据库,以便获取当前连接的数据库的类型和数据库表格的数据结构信息,生成与所述目标数据库相关的配置文件,所述配置文件至少包括所述目标数据库的表名、索引名、定值数,具体地,人为输入产生sql语句的配置文件,配置文件的格式可以为[表名][索引名][查询条件][定值个数][sec][自定义标志][自定义条件语句]。然后根据所述配置文件编译利用目标开发语言封装生成通用函数接口的代码,得到关于目标语言的数据库访问库文件。这样,就可以将其它数据库类型封装的sql语句代码过滤掉,有效地简化编译生成的库文件大小。进一步地,生成用于验证应用程序连接所述目标数据库是否合法的链接文件,所述链接文件中至少包括数据库类型、数据库地址、数据库的用户名和密码;将所述数据库访问库文件、所述头文件和所述链接文件打包发送给应用程序,以便应用程序合法调用。之所以这样做是为了避免中间件被非法访问,因为将链接文件打包进最后生成的文件包,所以当应用程序调用中间件时,就会进入验证是否合法阶段,若应用程序提供的用户名和密码不合法,则验证不通过,故无法成功调用中间件,否则,就可以成功调用中间件,完成应用程序的开发。可见,本发明实施例提供的方法将外设的各类数据库的sql语句进行统一封装,形成通用函数接口,使得可以通过同一个通用函数接口访问各类数据库,避免了为每一类应用开发对应的访问接口,从而实现统一的数据库访问。另外,本发明实施例封装的sql语句是统一产生dba多次验证确定的高效sql语句,避免了由于开发人员数据库知识储备不足而开发输入低效率sql语句。也可以通过设定目标语言与目标数据库类型产生适用于不同数据库、不同编程语言、静态库或动态库的应用程序包,通过固定api使得更换底层数据库,迅速快捷。基于相同的技术构思,本发明实施例还提供一种用于数据库访问的中间件,该中间件可执行上述方法实施例。本发明实施例提供的中间件如图4所示,包括:接收单元401、确定单元402、执行单元403、发送单元404,其中:接收单元401,用于接收应用程序发送的关于通用函数接口的调用请求,所述调用请求中包括访问目标数据库的参数信息;确定单元402,用于根据所述参数信息,确定与所述参数对应的访问数据库的指令,所述指令包含于所述通用函数接口的命令语句中;执行单元403,用于解析所述指令,并根据所述指令的解析结果执行对目标数据库的访问操作;发送单元404,用于将所述的访问操作的执行结果发送给所述应用程序。进一步地,还包括:通用函数接口封装单元405,用于针对任一个目标数据库,获取所述目标数据库表格的数据结构信息,并根据所述目标数据库表格的数据结构信息创建与目标开发语言对应的数据结构类型;利用所述目标数据库的预设的sql语句模板生成所述目标数据库对应的数据库访问指令;通过目标开发语言将各目标数据库对应的访问数据库的指令和创建的各目标数据库表格的数据结构类型封装生成通用函数接口,其中,所述通用函数接口用于修改或者查询所述目标数据库。进一步地,还包括:打包单元406,用于将创建的各目标数据库表格的数据结构类型和生成的通用函数接口保存在目标语言对应的头文件中;将生成所述通用函数接口的命令语句进行编译,得到关于所述目标开发语言的数据库访问库文件;将所述数据库访问库文件和所述头文件进行打包,将打包生成的文件包发送给应用程序,以便应用程序利用所述文件包调用通用函数接口。进一步地,所述打包单元406具体用于:根据配置文件将生成所述通用函数接口的命令语句进行编译,生成关于所述目标开发语言的数据库访问库文件,其中,所述配置文件是根据各应用程序访问的不同目标数据库类型配置生成的,所述配置文件至少包括与所述目标数据库类型相关的表名、索引名、定值数。进一步地,所述打包单元406具体用于:将所述数据库访问库文件、所述头文件和所述链接文件打包发送给应用程序,将打包生成的文件包发送给应用程序,所述链接文件中至少包括数据库的用户名和密码,所述链接文件用于在应用程序调用文件包的通用函数接口之前验证应用程序是否为合法的应用程序。本发明实施例通过提供一种用于数据库访问的中间件,其它应用程序需要访问底层数据库的数据时,就会通过该中间件提供的通用函数接口向目标数据库发出访问请求,其中通用函数接口中封装了用于数据库访问的指令,即sql语句等,然后中间件通过执行通用函数接口中的命令语句,确定用于访问数据库的指令,然后解析指令,从而执行对目标数据库的访问操作,然后将访问结果发送给应用程序,可见,通过这一方法就可以避免每个开发人员在进行业务需求开发时,各自开发访问数据库的代码,从而利用统一的中间件实现了数据库访问的功能,提高了开发效率,而且也降低了代码了出错率。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1