本发明涉及互联网技术领域,尤其涉及一种数据库查询的方法及装置。
背景技术:
结构化查询语言(Structured Query Language,简称SQL)数据库是一种无需使用过程化语言描述的数据库,查询者只需要通过SQL语句描述数据库需要“做什么”即可,而无需关心和描述数据库是“怎么做”的。SQL语句功能强大、简单易学、使用方便,已经成为数据库操作的基础,目前市场上几乎所有的数据库均支持SQL查询。
现有进行SQL数据库查询的过程为,查询者针对查询条件对应的业务数据(又称为变量)添加命名参数(又称为变量名),然后将“变量+变量名”的匹配对加入到变量集合中传递给SQL数据库,由SQL数据库查找并返回符合查询条件的数据结果。
目前还存在一种使用开放数据库互连(Open Database Connectivity,简称ODBC)接口的数据库,这种数据库由于提供了对SQL语言的支持,因此也可以通过SQL语句进行数据查询。但是ODBC数据库是通过变量在SQL语句中的先后顺序对不同变量进行表示的,而非如SQL数据库一样,通过变量名对不同变量进行表示,因此ODBC数据库无法支持命名参数的查询形式。现有技术中,当对SQL数据库及ODBC数据库进行兼容时,需要开发人员分别编写针对不同传参形式的SQL语句,由此增加了SQL语句的开发成本。
技术实现要素:
本发明提供了一种数据库查询的方法及装置,能够解决SQL数据库与ODBC数据库之间兼容成本较高的问题。
为解决上述问题,一方面,本发明提供了一种数据库查询的方法,该 方法包括:
接收结构化查询语言SQL脚本,所述SQL脚本携带有用于数据查询的变量;
查找与目标数据库类型相适配的脚本转换器;
通过查找的脚本转换器将所述SQL脚本转换为可执行的SQL脚本,所述可执行的SQL脚本为:传参形式与所述目标数据库类型一致的SQL脚本;
将所述可执行的SQL脚本传递给所述目标数据库,以使得所述目标数据库根据所述可执行的SQL脚本携带的变量进行数据查询。
另一方面,本发明提供了另一种数据库查询的装置,该装置包括:
接收单元,用于接收结构化查询语言SQL脚本,所述SQL脚本携带有用于数据查询的变量;
查找单元,用于查找与目标数据库类型相适配的脚本转换器;
转换单元,用于通过查找的脚本转换器将所述SQL脚本转换为可执行的SQL脚本,所述可执行的SQL脚本为:传参形式与所述目标数据库类型一致的SQL脚本;
传递单元,用于将所述可执行的SQL脚本传递给所述目标数据库,以使得所述目标数据库根据所述可执行的SQL脚本携带的变量进行数据查询。
本发明提供的数据库查询的方法及装置,能够接收SQL脚本,该SQL脚本携带有用于数据查询的变量;查找与目标数据库类型相适配的脚本转换器;通过查找的脚本转换器将SQL脚本转换为可执行的SQL脚本,可执行的SQL脚本为:传参形式与目标数据库类型一致的SQL脚本;将可执行的SQL脚本传递给目标数据库,以使得目标数据库根据可执行的SQL脚本携带的变量进行数据查询。与现有技术相比,本发明能够通过与目标数据库类型匹配的脚本转换器,将SQL脚本自动转换为与目标数据库类型相一致的传参形式。前端使用一种传参形式的SQL脚本就能够对不同类型的数据库进行查询,本发明无需开发人员编写不同传参形式的SQL脚本,能够降低SQL脚本的开发成本。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的 技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本实施例提供的一种数据库查询的方法的流程图;
图2示出了本实施例提供的另一种数据库查询的方法的流程图;
图3示出了本实施例提供的一种数据库查询的装置的结构示意图;
图4示出了本实施例提供的另一种数据库查询的装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
请参考图1,其示出了本实施例提供的一种数据库查询的方法的流程图。如图1所示,数据库查询的方法可以包括以下步骤:
101、接收结构化查询语言SQL脚本。
SQL脚本携带于前端发送的查询请求中,用于进行数据库查询。SQL脚本中包含作为查询条件的变量。在网页请求过程中,这个变量可以是统一资源定位符,在数据检索过程中,这个变量可以是字段信息。
本实施例中,前端会发送不同传参形式的SQL脚本,例如命名参数形式或匿名参数形式的SQL脚本。所述传参形式是指客户端向数据库传递参数时采用的传参格式类型,不同通信协议规定的传参格式类型各有不同,较为常见的包括命名参数类型和匿名参数类型。命名参数的格式类型要求 脚本中要携带为变量分配的具体变量名,以对不同的变量进行区分,这个变量名可以由脚本开发者自行定义;匿名参数的格式类型无需要求在脚本中添加变量名,可以通过变量在脚本中的排列顺序对不同变量进行区分。
102、查找与目标数据库类型相适配的脚本转换器。
目标数据库是进行数据查询的数据库,即数据查询请求指向的数据库。由于不同的SQL脚本有不同的传参形式,而不同类型的数据库对SQL脚本传参形式的要求不同,因此为对SQL脚本和数据库进行兼容,本步骤需要查找与目标数据库类型相适配的脚本转换器。本实施中有不同类型的脚本转换器,每种脚本转换器用于将特定传参形式的SQL脚本转换为另一种传参形式的SQL脚本。所谓适配是指将当前SQL脚本的传参形式转换为数据库支持的传参形式。
103、通过查找的脚本转换器将SQL脚本转换为可执行的SQL脚本。
可执行的SQL脚本为:传参形式与目标数据库类型一致的SQL脚本,即SQL脚本的传参形式为数据库支持的传参形式。例如对于SQL数据库而言,如果SQL脚本为匿名参数形式,则需要将SQL脚本转换为命名参数形式的脚本。再例如对于ODBC数据库而言,如果SQL脚本为命名参数形式,则需要将SQL脚本转换为匿名参数形式的脚本。
SQL脚本的转换通常是在脚本编译的过程中完成的,本质上讲,脚本转换器是一种特殊的脚本编译器。
104、将可执行的SQL脚本传递给目标数据库。
在进行脚本转换之后,SQL脚本的传参形式就可以被目标数据库接受了,将转换后的可执行SQL脚本发送给目标数据库,由目标数据库根据可执行的SQL脚本携带的变量进行数据查询。
只有SQL脚本的传参形式与目标数据库支持的传参形式一致,目标数据库才可以成功的从SQL脚本中解析出用于数据查询的变量。需要说明的是,脚本转换器仅对SQL脚本的传参形式进行转换,不会对SQL脚本中的变量进行改动。
本实施例提供的数据库查询的方法,能够接收SQL脚本,该SQL脚本携带有用于数据查询的变量;查找与目标数据库类型相适配的脚本转换器; 通过查找的脚本转换器将SQL脚本转换为可执行的SQL脚本,可执行的SQL脚本为:传参形式与目标数据库类型一致的SQL脚本;将可执行的SQL脚本传递给目标数据库,以使得目标数据库根据可执行的SQL脚本携带的变量进行数据查询。与现有技术相比,本实施例能够通过与目标数据库类型匹配的脚本转换器,将SQL脚本自动转换为与目标数据库类型相一致的传参形式。前端使用一种传参形式的SQL脚本就能够对不同类型的数据库进行查询,无需开发人员编写不同传参形式的SQL脚本,能够降低SQL脚本的开发成本。
本实施例提供了另一种数据库查询的方法,该方法是对图1所示的方法的进一步扩展和优化。请参考图2,其示出了本实施例提供的另一种数据库查询的方法的流程图。如图2所示,图1所示的步骤101进一步可以包括步骤201:
201、接收命名参数形式的SQL脚本。
本实施例中,前端发送的SQL脚本为命名参数形式的脚本,这种传参形式的脚本适用于SQL数据库,但是无法直接用于ODBC数据库直接使用。
命名参数形式的特点在于,前端在发起查询请求时,除了指定具体变量以外,还需要为不同变量赋予不同的变量名。变量与变量名对应记录在SQL脚本中,这种对应关系也称为匹配对。
进一步地,如图2所示,图1所示的步骤102可以包括步骤202。
202、若目标数据库为开放数据库互联ODBC数据库,则查找匿名参数形式的脚本转换器。
ODBC数据库支持的传参形式为匿名参数形式,在SQL脚本中不存在变量名的概念,变量名被替换为字符“?”。ODBC数据库对不同变量的识别是通过变量在SQL脚本中记录的顺序实现的。
在接收到SQL脚本后,首先对目标数据库的类型进行判断,即对目标数据库支持的传参形式进行判断。如果目标数据库为ODBC数据库,那么命名参数形式的SQL脚本就无法直接使用,此时需要通过脚本转换器将命名参数形式的SQL脚本转换为匿名参数形式的SQL脚本。
由于目标数据库为ODBC数据库,其支持匿名参数的传参形式,因此 本步骤中需要查找匿名参数形式的脚本转换器。
进一步地,如图2所示,图1所示的步骤103可以包括步骤203至步骤205。
203、通过匿名参数形式的脚本转换器,对命名参数形式的SQL脚本进行解析,获得变量及变量名。
在编译SQL脚本时,首先对命名参数形式的SQL脚本进行解析,从中获得变量和变量名组成的匹配对。
204、将变量名替换为预设字符。
顺应于匿名参数的传参格式,将解析出的变量名进行字符替换。在本实施例的一种实现方式中,可以将变量名替换为字符“?”。
实际应用中可能存在多个变量/变量名的情况,无论各个变量名之间的差异如何,都需要将所有的变量名统一替换为预设的字符。
205、根据变量的变量索引对变量进行排序。
在命名参数形式的SQL脚本中,多个匹配对是按照一定的顺序进行记录的,这种匹配对的顺序实际上就是变量的顺序,可以通过SQL脚本中自带的变量索引获得。对于匿名参数形式的SQL脚本,需要通过变量的顺序对不同的变量进行区分,因此根据SQL脚本中的变量索引确定各个变量之间的顺序。
在将变量名替换为预设字符,并且按照变量索引对变量进行排序后,就完成了将命名参数形式的SQL脚本转换为匿名参数形式的SQL脚本的工作。之后就可以将获得的匿名参数形式的SQL脚本发送给ODBC数据库进行查询。
进一步地,如图2所示,图1所示的步骤101之后还可以包括步骤206。
206、若目标数据库为SQL数据库,则将命名参数形式的SQL脚本直接传递给目标数据库。
上述流程是以将命名参数形式的SQL脚本传递给ODBC数据库这种情况进行的说明,当目标数据库为SQL数据库时,SQL数据库支持命名参数形式的变量,因此命名参数形式的SQL脚本可以直接传递给SQL数据库进行查询,无需对SQL脚本进行传参形式转换。
为了实现上述方法实施例,本实施例提供一种与上述方法实施例对应的装置实施例。请参考图3,其示出了本实施例提供的一种数据库查询的装置的结构示意图。该装置与图1或图2所示的方法对应。如图3所示,数据库查询的装置可以包括:
接收单元301,用于接收结构化查询语言SQL脚本,SQL脚本携带有用于数据查询的变量;
查找单元302,用于查找与目标数据库类型相适配的脚本转换器;
转换单元303,用于通过查找的脚本转换器将SQL脚本转换为可执行的SQL脚本,可执行的SQL脚本为:传参形式与目标数据库类型一致的SQL脚本;
传递单元304,用于将可执行的SQL脚本传递给目标数据库,以使得目标数据库根据可执行的SQL脚本携带的变量进行数据查询。
进一步地,图3所示的接收单元301,用于接收命名参数形式的SQL脚本,命名参数形式的SQL脚本携带有变量与变量名组成的匹配对。
进一步地,图3所示的查找单元302,用于当目标数据库为开放数据库互联ODBC数据库时,查找匿名参数形式的脚本转换器。
进一步地,请参考图4,其示出了本实施例提供的另一种数据库查询的装置的结构示意图。
如图4所示,图3所示的转换单元303,包括:
解析模块401,用于通过匿名参数形式的脚本转换器,对命名参数形式的SQL脚本进行解析,获得所述变量及所述变量名;
替换模块402,用于将变量名替换为预设字符;
排序模块403,用于根据变量的变量索引对变量进行排序,获得匿名参数形式的SQL脚本。
进一步地,图3所示的传递单元304,用于当目标数据库为SQL数据库时,将命名参数形式的SQL脚本直接传递给目标数据库。
本实施例提供的数据库查询的装置,能够接收SQL脚本,该SQL脚本携带有用于数据查询的变量;查找与目标数据库类型相适配的脚本转换器;通过查找的脚本转换器将SQL脚本转换为可执行的SQL脚本,可执行的 SQL脚本为:传参形式与目标数据库类型一致的SQL脚本;将可执行的SQL脚本传递给目标数据库,以使得目标数据库根据可执行的SQL脚本携带的变量进行数据查询。与现有技术相比,本实施例能够通过与目标数据库类型匹配的脚本转换器,将SQL脚本自动转换为与目标数据库类型相一致的传参形式。前端使用一种传参形式的SQL脚本就能够对不同类型的数据库进行查询,本实施例无需开发人员编写不同传参形式的SQL脚本,能够降低SQL脚本的开发成本。
数据库查询的装置包括处理器和存储器,上述接收单元、查找单元、转换单元及传递单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来对SQL脚本的传参形式进行自动转换。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:接收结构化查询语言SQL脚本,SQL脚本携带有用于数据查询的变量;查找与目标数据库类型相适配的脚本转换器;通过查找的脚本转换器将SQL脚本转换为可执行的SQL脚本,可执行的SQL脚本为:传参形式与目标数据库类型一致的SQL脚本;将可执行的SQL脚本传递给目标数据库,以使得目标数据库根据可执行的SQL脚本携带的变量进行数据查询。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁 盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。