一种生成及执行sql语句的方法和系统的制作方法

文档序号:6442617阅读:993来源:国知局
专利名称:一种生成及执行sql语句的方法和系统的制作方法
技术领域
本申请涉及计算机数据库领域,尤其涉及一种生成及执行SQL语句的方法和系统。
背景技术
随着近些年信息化的加快,数据库的应用越来越普遍。在现行的数据库系统中,不同的数据库对标准的sql语言的支持是不尽相同的,不同的数据库往往都会出于某些商业目的或者性能上的要求,对标准的sql语言做一些扩展。本申请人在实现本申请实施例的过程中,发现现有技术存在如下技术问题:一、当用户在书写了一个sql语句时,难以保证其跨数据库性。比如,在对时间的处理上,oracle数据库和sqlserver数据库就有很大的不同,特别地,若数据库中有一个信息拥有时间记录,在对其进行增加,修改,查询过程时,两种类型数据库所使用的sql语句差别就更加明显。二、当需要将数据库的查询结果做应用级别的展示的时候,往往需要对标准的sql语句做个性化的开发。比如,将查询结果保存为XML,通过web服务发送给服务调用者。或者将查询结果保存为微软office支持的word文件、excel文件、cvs文件等等。而标准的sql语句不却能够满足其个性化开发的需要。可见,现有技术中的sql语句不能够实现跨数据库使用,同时也不能够适用个性化的开发应用环境。

发明内容
有鉴于此,本申请提供一种生成SQL语句的方法,用以解决现有技术中存在SQL语句不能实现跨数据库使用的问题。一方面,通过本申请的一个实施例,提供了如下技术方案:一种生成SQL语句的方法,应用在XML_SQL解析器中,所述XML_SQL解析器与类型不同的至少两个数据库相连接,所述方法包括:接收用户输入的XML_SQL语句,其中所述XML_SQL语句至少包括有XML控制标签,所述控制标签至少包括有所述至少两个数据库中的一个特定数据库的数据库地址,数据库类型,数据库驱动和数据库语言; 判断所述XML_SQL语句是否正确;在所述XML_SQL语句正确时,至少基于所述控制标签,生成所述特定数据库的可执行SQL语句,以供所述特定数据库执行。可选的,在所述生成所述特定数据库可执行的SQL语句之后,所述方法还包括:接收所述特定数据库执行所述可执行SQL语句而获得的执行结果。可选的,所述XML_SQL语句还包括:结果标签,用来描述所述特定数据库通过执行所述可执行SQL语句而获得的执行结果的文档格式。
可选的,所述结果标签中还包括有所述执行结果的保存路径,所述保存路径为:所述特定数据库本地路径或远程路径。可选的,所述接收所述特定数据库执行所述可执行SQL语句而获得的执行结果,具体为:接收所述特定数据库执行所述可执行SQL语句而获得的以所述文档格式保存的文件。可选的,在所述接收所述特定数据库执行所述可执行SQL语句而获得的以所述文档格式保存的文件之后,所述方法还包括:将所述文件发送到所述保存路径。可选的,所述XML_SQL语句还包括:UI标签,用来描述所述XML_SQL解析器与所述特定数据库间的用户操作。可选的,所述UI标签具有一个value属性。另一方面,通过本申请的另一实施例提供了如下技术方案:一种执行SQL语句的方法,所述方法应用在一特定数据库中,所述特定数据库为至少两个数据库中的一个数据库,其中,所述至少两个数据库与一 XML_SQL解析器连接,所述至少两个数据库为不同类型的数据库,所述方法包括:接收所述XML_SQL解析器生成的与所述特定数据库对应的SQL语句;执行所述SQL语句,获得执行结果。可选的,所述SQL语句由所述XML_SQL解析器基于用户输入的XML_SQL语句而生成。可选的,所述XML_SQL语句包括:结果标签,用来描述所述特定数据库通过执行所述可执行SQL语句而获得的执行结果的文档格式。可选的,在所述执行所述SQL语句,获得执行结果之后,所述方法还包括:将所述执行结果保存为所述文档格式的文件;将所述文件发送给所述XML_SQL解析器。另一方面,本申请还提供过来如下技术方案:一种生成SQL语句的系统,所述系统包括有XML_SQL解析器,所述XML_SQL解析器与类型不同的至少两个数据库相连接,所述系统包括:第一接收模块,用于接收用户输入的XML_SQL语句,其中所述XML_SQL语句至少包括有XML控制标签,所述控制标签至少包括有所述至少两个数据库中的一个特定数据库的数据库地址,数据库类型,数据库驱动和数据库语言;判断模块,用于判断所述XML_SQL语句是否正确;生成模块,用于在所述XML_SQL语句正确时,至少基于所述控制标签,生成所述特定数据库的可执行的SQL语句,以供所述特定数据库执行。可选的,所述系统还包括:第二接收模块,用于在所述生成所述特定数据库可执行的SQL语句之后,接收所述特定数据库执行所述可执行SQL语句而获得的执行结果。再一方面,本申请还提供了如下技术方案:一种执行SQL语句的系统,应用在一特定数据库中,所述特定数据库为至少两个数据库中的一个数据库,其中,所述至少两个数据库与一 XML_SQL解析器连接,所述至少两个数据库为不同类型的数据库,所述系统包括:接收模块,用于接收所述XML_SQL解析器生成的与所述特定数据库对应的SQL语句;获得模块,用于执行所述SQL语句,获得执行结果。可选的,所述XML_SQL语句包括:结果标签,用来描述所述特定数据库通过执行所述可执行SQL语句而获得的执行结果的文档格式。可选的,所述系统还包括:保存模块,用于在所述执行所述SQL语句,获得执行结果之后,将所述执行结果保存为所述文档格式的文件;发送模块,用于将所述文件发送给所述XML_SQL解析器。上述技术方案中的一个或多个技术方案,具有如下技术效果或优点:一、通过采用本申请中生成的SQL语句的方法,解决了现有技术中标准SQL语句不能兼容类型不同的数据库的技术问题,从而实现了跨数据库类型的操作。二、进一步的,由于生成的SQL语句结合了 XML语言中的优势,使得生成的SQL语句能够适应于一些有特殊性能要求的场景,扩展了 SQL语句的应用范围。


图1为本申请实施例中生成SQL语句的方法流程图;图2为本申请实施例中执行SQL语句的方法流程图;图3为本申请实施例中生成SQL语句的系统模块图;图4为本申请实施例中执行SQL语句的系统模块图。
具体实施例方式下面结合各个附图对本申请实施例技术方案的主要实现原理具体实施方式
及其对应能够达到的有益效果进行详细的阐述。请参考图1,为本申请实施例中生成SQL语句的方法流程图;步骤100,接收用户输入的XML_SQL语句;在具体的实施过程中,所述XML_SQL语句至少包括有XML控制标签,在所述控制标签中,所述控制标签至少包括有两个数据库中的一个特定数据库的数据库地址,数据库类型,数据库驱动和数据库语言等信息,下面以一个具体的控制标签作为示例,进行说明。控制标签示例一:<database url = “192.168.18.1” type = “oracle”driver = “oraclejdbc.driver.0racleDriver,,language = “ java,,resultsize = “ 1000” >orcl〈/database> ;在此标签中数据库的地址为192.168.18.1,数据库类型为oracle,驱动为oracle, jdbc.driver.0racleDriver,而米用的语言则为 java ;所述XML_SQL语句还包括:结果标签,用来描述所述特定数据库通过执行所述可执行SQL语句而获得的执行结果的文档格式。具体而言,该标签是一个可选的标签,如果是非查询语句,比如删除、插入、更新等语句,就可以不考虑使用此标签,本申请所属的技术人员可以根据实际的情况设置此类语句是否要返回结果信息,比如删除了多少条信息,插入了多少条息等等。所述结果标签中还包括有所述执行结果的保存路径,所述保存路径为:所述特定数据库本地路径或远程路径。所述接收所述特定数据库执行所述可执行SQL语句而获得的执行结果,具体为:接收所述特定数据库执行所述可执行SQL语句而获得的以所述文档格式保存的文件。在所述接收所述特定数据库执行所述可执行SQL语句而获得的以所述文档格式保存的文件之后,所述方法还包括:将所述文件发送到所述保存路径。下面就结果标签的具体应用方式,举例说明。结果标签示例一:保存查询结果的前100行以word格式到d:盘。〈result savetype =”0”startRow = OendRow = IOOpath =,,d:\”type =,,0,,filename =,account—result,filetype = ‘0,/> ;特别地,若将查询结果保存到本地磁盘的时候,如果不指定保存的类型,则默认将结果集保存到一个XML文件,同时若路径也没有指定,或属性为空,则会弹出路径选择对话框,提示用户输入一个具体的保存路径或用户选择一个存在的路径。结果标签示例二:通过 webservice (http://xxxx.xx.com/sevices/CS wsdl)的 saveResult 接口保存查询结果的第五页(每页十行)到远程。其实现过程如下:〈result savetype =,,I,,pageNum =,5,pageSize =,,10,,webserviceurl = http://xxxx.xx.com/sevices/CS wsdlwebservice Interface =,,saveResult,,/> ;另外,在所述XML—SQL语句还包括UI标签,用来描述所述XML—SQL解析器与所述特定数据库间的用户操作。另外,所述UI标签还具有一个value属性。在具体的实施过程中,此类标签用来描述与用户进行Π交互的信息,在实际使用的时候,会为这些UI标签动态生成操作界面,例如:输入一个日期,时间、数字,字符串的对话框等等,总之,UI标签主要是为了与用户进行动态沟通,获取信息用的。下面以UI标签的具体应用方式,举例说明。〈date format = “yyyy-mm-dd” description = “请输入日期,,>〈date> ;〈date format =“yyyy-MM_dd hh24:mm: ss” description = “请输入时间” Xdate〉;〈double format = “#.00” description = “请输入数字(保留两位小数),,>〈/double);〈double format = “#.” description = “请输入一个整数,,>〈/double> ;〈string size = “ 10” description = “请输入一个字符串 ” >〈/string> ;

由此可以看出,在每个Π标签中,由于属性值的不同,会有不同的显示效果,例如date标签的format属性的值的不同,会生成不同的时间UI控件。最终产生UI控件的响应结果会替换原有标签,形成可执行的SQL语言;另外,并不是所有的UI标签都会产生对话框进行与数据库进行交互,所有的UI标签一旦指定了 value属性,则不再弹出对话框,而是以value属性的值作为最终与数据库交互之用。例如,像下面这样使用〈date/〉标签:〈date value = ” 1988-12-12” >〈date> ;由于是固定的日期,考虑到跨数据库的要求,最终形成的可执行SQL中就会是1988年12月12日。这样,不论是最终的执行数据库是oracle还是sqlserver还是mysql都可以顺利执行。在所述XML_SQL语句中还可以包括一些其他的标签步骤110,判断所述XML_SQL语句是否正确;在具体的实施过程中,主要是验证所述XML_SQL语句中,XML的标签是否符合语法规定,比如对控制标签进行处理,确认语句中附加的数据库信息是否正确,以便真正执行sql语言的时候,获取数据库的连接。对Π标签进行处理,保证用户进行交互,动态的获取数据。步骤120,在所述XML_SQL语句正确时,至少基于所述控制标签,生成所述特定数据库的可执行SQL语句,以供所述特定数据库执行。在具体的实施过程中,根据用户输入的动态数据,解析器将XML_SQL中的XML部分值用真实的数值进行取代,形成真正的可执行的数据库SQL语句,在SQL语句生成的时候,可能会受到结果标签分析功能的影响,比如,结果标签指定了返回前100条数据,则生成实际的SQL语句会有具体的影响;同时,根据结果标签中用户的要求,将数据返回的执行结果以特定的格式发送到指定位置。比如,以word格式发送到d盘,保存为pdf文件等等。在本申请实施例中,可以对既有的UI标签进行扩展,比如以〈String〉标签为例,用户可能觉得弹出的对话框不够美观,此时,本领域的技术人员可以通过重新定制一个窗口来显示对话框;还比如,一些开发人员觉得提供的Π窗口无法满足业务的需求,例如,弹出一个对话框以获得用户的籍贯,而该对话框为一个普通的三级下拉框,第一级选择省、第二级选择市、第三级选择区县,那么开发人员可能会新建一个名为〈BirthPlaceX/BirthPlace〉的Π应用标签。并为此标签提供一个Π窗口。在具体应用的时候,将此标签<BirthPlaceX/BirthPlace> 嵌入 XML_SQL 语言中使用。同样,对于一些常用的结果集保存模式,比如:将结果集保存为一个word文件或者通过WebService保存到远程。这些保存模式可能仍然无法令用户满意,举例来说,用户希望结果集被保存到一个txt文件并被打成一个zip压缩包。如果是这样的话,开发者就可以对此处提到的结果集保存标签进行扩展,从而对数据库返回的数据进行重新组织,最后生成指定格式的文件。请参考图2,为本申请实施例中执行SQL语句的方法流程图;步骤200,接收所述XML_SQL解析器生成的与所述特定数据库对应的SQL语句;在具体的实施过程中,实施执行SQL语句的方法,应用在一特定数据库中,述特定数据库为至少两个数据库中的一个数据库,其中,所述至少两个数据库与一 XML_SQL解析器连接,所述至少两个数据库为不同类型的数据库;所述SQL语句由所述XML_SQL解析器基于用户输入的XML_SQL语句而生成。所述SQL语句包括有控制标签、结果标签、UI标签等等标签,其中,所述结果标签用来描述所述特定数据库通过执行所述可执行SQL语句而获得的执行结果的文档格式。步骤210,执行所述SQL语句,获得执行结果。在具体的实施过程中,根据所述SQL语句中控制标签等标签中的信息,执行相应的内容,在步骤210之后还包括,将所述执行结果保存为所述文档格式的文件;同时,将所述文件发送给所述XML_SQL解析器。下面就以一个具体的例子,说明所述执行SQL语句的过程;<database url = “192.168.18.1” type = “oracle”driver = “oracle, jdbc.driver.0racleDriver,,language = “java,,resultsize = “ 1000” >orcl〈/database> ;select acountid as '贝长号 id' , customer name as '开户人'from useracount where amount〉,〈double format =“#."description =“请输入最低账户余额”>〈/double)and account_created〈date format = ' yyyy-MM-dd ' description ='请输入创建用户的最 低时间'></date>and customer_name like '〈String size='2' description ='请输入一个姓氏'>% '〈result savetype = ” 0” startRow = OendRow = 100path =,,d:\,,typefilename =,account_result,webservice =,,,y webservicelnterface =,,,,> ;当用户输入此XML_SQL语句之后,会发送给XML_SQL语言解析器,解析器会首先对此XML_SQL语句做语法分析,确认符合语法规定(主要是验证XML标签部分的合法性)之后,解析器进入实质工作阶段:第一步:对控制标签进行处理,确认语句中附加的数据库的信息是否正确,以便真正执行sql语言的时候,获取数据库的连接。第二步:对Π标签进行处理,和用户进行交互,以便动态的获取数据,例如,上述语句中的获取“最低账户余额”就是工作在此阶段。第三步:根据用户输入动态数据,将XML_SQL中的XML部分用真实的值进行取代,形成真正的可执行的数据库SQL语句,“实现跨数据库特性”就是工作在此阶段,根据用户指定的数据库不同,生成的SQL语句是不尽相同的。需要说明的是:此时SQL语句的生成是有可能受到结果标签的分页功能的影响的,例如,本例中结果标签指定了返回前100条数据,对于生成实际的SQL语句则根据此指定的结果标签,返回前100条数据。第四步:执行SQL语句阶段,即在真实的数据库上执行上述第三步产生SQL语句。t匕如,若所述SQL语句为查询语句,则执行查询动作,若为删除语句,则执行删除动作。第五步:结果标签的处理,根据用户的要求,将数据库返回的执行结果以特定的格式发送到指定位置。
下面请参考图3,为本申请实施例中生成SQL语句的系统模块图;如图所示,所述系统包括哟XML_SQL解析器,所述XML_SQL解析器与类型不同的至少两个数据库相连接,所述系统包括:第一接收模块,用于接收用户输入的XML_SQL语句,其中所述XML_SQL语句至少包括有XML控制标签,所述控制标签至少包括有所述至少两个数据库中的一个特定数据库的数据库地址,数据库类型,数据库驱动和数据库语言;判断模块,用于判断所述XML_SQL语句是否正确;生成模块,用于在所述XML_SQL语句正确时,至少基于所述控制标签,生成所述特定数据库的可执行的SQL语句,以供所述特定数据库执行。第二接收模块,用于在所述生成所述特定数据库可执行的SQL语句之后,接收所述特定数据库执行所述可执行SQL语句而获得的执行结果。下面请参考图4,为本申请实施例中生成SQL语句的系统模块图;如图所示,所述系统应用在一特定数据库中,所述特定数据库为至少两个数据库的一个数据库,其中,所述至少两个数据库与一 XML_SQL解析器连接,所述至少两个数据库为不同类型的数据库,所述系统包括:接收模块,用于接收所述XML_SQL解析器生成的与所述特定数据库对应的SQL语句;获得模块,用于执行所述SQL语句,获得执行结果。保存模块,用于在所述执行所述SQL语句,获得执行结果之后,将所述执行结果保存为所述文档格式的文件;发送模块,用于将所述文件发送给所述XML_SQL解析器。由于本装置实施例与前述方法实施例都是基于同一发明构思的同一发明,鉴于前述对方法实施例的实施过程进行了详细的描述,为了说明书的简洁,此处不再赘述装置实施例的具体实施过程。通过本申请的一个或多个实施例,可以实现如下技术效果:一、通过采用本申请生成的SQL语句的方法,解决了现有技术中标准SQL语句不能兼容类型不同的数据库的技术问题,从而实现了跨数据库类型的操作。二、进一步的,由于生成的SQL语句结合了 XML语言中的优势,使得生成的SQL语句能够适应于一些有特殊性能要求的场景,扩展了 SQL语句的应用范围。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
权利要求
1.一种生成SQL语句的方法,应用在XML_SQL解析器中,所述XML_SQL解析器与类型不同的至少两个数据库相连接,其特征在于,所述方法包括: 接收用户输入的XML_SQL语句,其中所述XML_SQL语句至少包括有XML控制标签,所述控制标签至少包括有所述至少两个数据库中的一个特定数据库的数据库地址,数据库类型,数据库驱动和数据库语言; 判断所述XML_SQL语句是否正确; 在所述XML_SQL语句正确时,至少基于所述控制标签,生成所述特定数据库的可执行SQL语句,以供所述特定数据库执行。
2.如权利要求1所述的方法,其特征在于,在所述生成所述特定数据库可执行的SQL语句之后,所述方法还包括: 接收所述特定数据库执行所述可执行SQL语句而获得的执行结果。
3.如权利要求2所述的方法,其特征在于,所述XML_SQL语句还包括:结果标签,用来描述所述特定数据库通过执行所述可执行SQL语句而获得的执行结果的文档格式。
4.如权利要求3所述的方法,其特征在于,所述结果标签中还包括有所述执行结果的保存路径,所述保存路径为:所述特定数据库本地路径或远程路径。
5.如权利要求4所述的方法,其特征在于,所述接收所述特定数据库执行所述可执行SQL语句而获得的执行结果,具体为: 接收所述特定数据库执行所述可执行SQL语句而获得的以所述文档格式保存的文件。
6.如权利要求5所述的方法,其特征在于,在所述接收所述特定数据库执行所述可执行SQL语句而获得的以所述文档格式保存的文件之后,所述方法还包括: 将所述文件发送到所述保存路径。
7.如权利要求1 6中任一项所述的方法,其特征在于,所述XML_SQL语句还包括:UI标签,用来描述所述XML_SQL解析器与所述特定数据库间的用户操作。
8.如权利要求7所述的方法,其特征在于,所述UI标签具有一个value属性。
9.一种执行SQL语句的方法,应用在一特定数据库中,所述特定数据库为至少两个数据库中的一个数据库,其中,所述至少两个数据库与一 XML_SQL解析器连接,所述至少两个数据库为不同类型的数据库,其特征在于,所述方法包括: 接收所述XML_SQL解析器生成的与所述特定数据库对应的SQL语句; 执行所述SQL语句,获得执行结果。
10.如权利要求9所述的方法,其特征在于,所述SQL语句由所述XML_SQL解析器基于用户输入的XML_SQL语句而生成。
11.如权利要求10所述的方法,其特征在于,所述XML_SQL语句包括:结果标签,用来描述所述特定数据库通过执行所述可执行SQL语句而获得的执行结果的文档格式。
12.如权利要求11所述的方法,其特征在于,在所述执行所述SQL语句,获得执行结果之后,所述方法还包括: 将所述执行结果保存为所述文档格式的文件; 将所述文件发送给所述XML_SQL解析器。
13.一种生成SQL语句的系统,所述系统包括有XML_SQL解析器,所述XML_SQL解析器与类型不同的至少两个数据库相连接,其特征在于,所述系统包括:第一接收模块,用于接收用户输入的XML_SQL语句,其中所述XML_SQL语句至少包括有XML控制标签,所述控制标签至少包括有所述至少两个数据库中的一个特定数据库的数据库地址,数据库类型,数据库驱动和数据库语言; 判断模块,用于判断所述XML_SQL语句是否正确; 生成模块,用于在所述XML_SQL语句正确时,至少基于所述控制标签,生成所述特定数据库的可执行的SQL语句,以供所述特定数据库执行。
14.如权利要求13所述的系统,其特征在于,所述系统还包括: 第二接收模块,用于在所述生成所述特定数据库可执行的SQL语句之后,接收所述特定数据库执行所述可执行SQL语句而获得的执行结果。
15.一种执行SQL语句的系统,应用在一特定数据库中,所述特定数据库为至少两个数据库中的一个数据库,其中,所述至少两个数据库与一 XML_SQL解析器连接,所述至少两个数据库为不同类型的数据库,其特征在于,所述系统包括: 接收模块,用于接收所述XML_SQL解析器生成的与所述特定数据库对应的SQL语句; 获得模块,用于执行所述SQL语句,获得执行结果。
16.如权利要求15所述的系统,其特征在于,所述XML_SQL语句包括:结果标签,用来描述所述特定数据库通过执行所述可执行SQL语句而获得的执行结果的文档格式。
17.如权利要求15所述的系统,其特征在于,所述系统还包括: 保存模块,用于在所述执行所述SQL语句,获得执行结果之后,将所述执行结果保存为所述文档格式的文件; 发送模块,用于将所述文件发送给所述XML_SQL解析器。
全文摘要
本申请公开了一种生成及执行SQL语句的方法和系统,所述方法应用在XML_SQL解析器中,所述XML_SQL解析器与类型不同的至少两个数据库相连接,所述方法包括接收用户输入的XML_SQL语句,其中所述XML_SQL语句至少包括有XML控制标签,所述控制标签至少包括有所述至少两个数据库中的一个特定数据库的数据库地址,数据库类型,数据库驱动和数据库语言;判断所述XML_SQL语句是否正确;在所述XML_SQL语句正确时,至少基于所述控制标签,生成所述特定数据库的可执行SQL语句,以供所述特定数据库执行。通过上述技术方法解决了SQL语句不能同时适用于多个类型不同的数据库的问题。
文档编号G06F17/30GK103177008SQ20111043489
公开日2013年6月26日 申请日期2011年12月22日 优先权日2011年12月22日
发明者毕继安 申请人:北大方正集团有限公司, 北京北大方正电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1