一种动态SQL语句的构造方法,包括以下步骤:针对每一条查询条件,将其转换为参数数据对象,并将所述参数数据对象映射到参数对象集合中,并将其他查询子句组合到查询子句表中;解析参数对象集合,将其转换为第一DSQL子表达式;判断所构造的第一DSQL子表达式是否合理;如果所构造的第一DSQL子表达式合理,则判断参数数据对象中的参数数据类型是否符合规定;如果符合规定,则进行赋值操作,将参数数据对象中的数据值赋予对应的参数名,并解析查询子句表,将查询子句添加到第一DSQL子表达式中,形成第DSQL子表达式;以及根据数据库映射,解析查询子句表,将第DSQL子表达式转换为动态SQL语句。
【技术实现步骤摘要】
本专利技术涉及数据库,特别涉及访问关系数据库中的数据的方法,可以广泛应用于基于数据库技术的企业级应用。
技术介绍
随着信息技术的发展,数据库的应用越来越广泛,各种企业级应用都普遍采用了数据库技术。如何快捷、有效地实现对数据库的访问是数据库应用的关键技术。在构建一个大型的面向对象业务系统,并将对象保存到关系型数据库中时,可能需要花很多时间去处理如何使对象持久化。SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle、Sybase、Microsoft SQL Server、Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select、Insert、Update、Delete、Create以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。一般访问关系数据库的方法是将SQL代码嵌入到一个宿主语言里(例如,JAVA语言)。直接在对象中内嵌持久化代码的方法使得开发者能够快速书写代码。实现对数据库的数据访问通常是在应用中拼写SQL表达式,调用相应的接口实现访问。例如,带条件的查询语句通常是如下写法SELECT*FROM table_name1 WHERE column1LIKE’x%’。这里LIKE必须和後面的’x%’相呼应表示以x为开头的字串。如果有多个查询条件并列,那么需要根据对数据访问的不同需求,在应用中构造不同的SQL表达式。对于数据库的修改、插入、删除、查询操作,特别是需要查询条件的操作,常常是需要构造相对复杂的SQL表达式。另外,由于关系数据库类型的不同,一些SQL表达式的语法也有不同的扩展。比如表示取出符合条件的前五条记录的结果集,在SQL Server中是用SELECT*FROM table_name1 WHEREtop 5这种语法来表示,而在Oracle数据库中是用SELECT*FROMtable_name1 WHERE rownum<6来表示获取记录的表达式。这样,在应用中书写访问数据库的代码,也会由于数据库类型的不同,需要构造完成相同功能的不同SQL表达式。使用内嵌SQL的缺点是它直接将业务类耦合到关系数据库的框架上。因此在业务类中内嵌SQL将导致代码难于维护和扩展。
技术实现思路
本专利技术的一个目的是尽量屏蔽由于关系数据库类型不同而带来的差异,对于使用者来说,需要通过配置信息来确定要访问的关系数据库类型,用户在进行对数据库访问操作时,使用本专利技术提供的方法,做为对数据库访问的统一接口。因此对使用者来讲,如同访问同一种数据库。本专利技术的另一个目的是提供动态构造带查询条件的SQL表达式方法。如果有多个查询条件,可以通过本专利技术提供的方法,由查询条件动态构造一个SQL表达式,而不需要构造多个SQL表达式。本专利技术能够实现应用动态构造SQL表达式的方法,简化了访问数据库的调用接口。本专利技术提出了一种创建健壮的(robust)持久层的方法,它用这样一种方式将对象映射到持久化机制中,即关系框架的简单变化不会影响面向对象的代码。这种方法允许机构开发大规模的、关键任务的应用系统。健壮持久层(持久化类)的应用系统的类型体系结构是基于层模式的,层模式的基本思想是在一个给定层中的类可以与该层中的其它类交互,或与邻接层中的类交互。源码层次化使得应用系统内部的耦合被降低,因而系统更易于维护和功能增强,也大大提高了应用系统的健壮性。本专利技术提供了一种方法,它能够通过实现动态构造SQL表达式,来简化对关系数据库的访问。根据本专利技术,提供了一种,包括以下步骤针对每一条查询条件,将其转换为参数数据对象,并将所述参数数据对象映射到参数对象集合中,并将其他查询子句组合到查询子句表中;解析参数对象集合,将其转换为第一自定义结构化查询语言子表达式;判断所构造的第一自定义结构化查询语言子表达式是否合理,如果不合理,则结束;如果所构造的第一自定义结构化查询语言子表达式合理,则判断参数数据对象中的参数数据类型是否符合规定,如果不符合规定的基本类型,则结束;如果符合规定,则进行赋值操作,将参数数据对象中的数据值赋予对应的参数名,并解析查询子句表,将查询子句添加到第一自定义结构化查询语言子表达式中,形成第二自定义结构化查询语言子表达式;以及根据数据库映射,解析查询子句表,将第二自定义结构化查询语言子表达式转换为动态结构化查询语言语句。优选地,可以以一维数组的形式组织所述参数数据对象。优选地,可以以链表的形式组织所述参数数据对象。优选地,可以以二维数组的形式组织所述参数对象集合。优选地,可以以三维数组的形式组织所述参数对象集合。优选地,可以以二叉树的形式组织所述参数集合。优选地,所述参数数据对象可以包括以下项目参数名、参数值、参数的数据类型、参数的操作符。优选地,所述查询子句表可以为散列表。优选地,所述查询子句表可以包括子操作表格项和变量表格项。优选地,可以通过解析查询子句表的子操作表格项,来形成第二自定义结构化查询语言子表达式;以及可以根据数据库映射,解析查询子句表的变量表格项,将第二自定义结构化查询语言子表达式转换为动态结构化查询语言语句。本方法能够解决了带有查询条件的操作数据库的构造复杂SQL表达式问题,使用时调用基本操作的统一接口,使用一个SQL表达式就可以访问关系数据库,使用更方便、简化。本专利技术提供的动态结构化查询语句的构造方法,一方面解决了进行带有查询条件的操作时,需要构造复杂SQL表达式的问题,而通过使用本专利技术提供的调用查询操作的统一接口,创建一个SQL表达式就可以进行关系数据库的查询操作,方便、简化了访问数据库的调用接口。另一方面,通过使用本专利技术提供的方法,只需要修改配置信息,就可以很容易地将要访问的数据库调整到不同的数据存储方式,而不会影响到调用者,使得应用程序从某种数据源迁移到其他种类的数据源变得异常简单和容易。将本专利技术提供的方法应用于联想的宽带业务支持项目中,取得了良好的效果。该项目由于使用了动态结构化查询语句的构造方法,使得开发效率大大加快,不仅实施方便,同时也减少了大部分进行数据库操作开发所需的工作量,极大地提高了工作效率,简化了项目的维护。附图说明下面,将参照附图,对本专利技术的优选实施例进行详细的描述,其中图1示出了用在本专利技术中的参数数据对象的结构;图2示出了用在本专利技术中的参数对象集合的结构以及参数数据对象到参数对象集合的映射;图3示出了用在本专利技术中的散列表的结构;图4示出了用在本专利技术中、记录各个数据库扩展SQL表达式的结构;图5示出了根据本专利技术的动态SQL语句构造方法的流程图;图6示出了用在本专利技术的具体示例中的散列表的示例;以及图7示出了用在本专利技术的具体示例中、记录各个数据库扩展SQL表达式的示例结构。具体实施例方式下面结合附图对本专利技术作具体说明。应该指出,所描述的实施例仅是为了说明的目的,而不是对本专利技术范围的限制。通常带条件的查询或删除的S本文档来自技高网...
【技术保护点】
一种动态结构化查询语言语句的构造方法,包括以下步骤:针对每一条查询条件,将其转换为参数数据对象,并将所述参数数据对象映射到参数对象集合中,并将其他查询子句组合到查询子句表中;解析参数对象集合,将其转换为第一自定义结构化查询语 言子表达式;判断所构造的第一自定义结构化查询语言子表达式是否合理,如果不合理,则结束;如果所构造的第一自定义结构化查询语言子表达式合理,则判断参数数据对象中的参数数据类型是否符合规定,如果不符合规定的基本类型,则结束; 如果符合规定,则进行赋值操作,将参数数据对象中的数据值赋予对应的参数名,并解析查询子句表,将查询子句添加到第一自定义结构化查询语言子表达式中,形成第二自定义结构化查询语言子表达式;以及根据数据库映射,解析查询子句表,将第二自定义结 构化查询语言子表达式转换为动态结构化查询语言语句。
【技术特征摘要】
1.一种动态结构化查询语言语句的构造方法,包括以下步骤针对每一条查询条件,将其转换为参数数据对象,并将所述参数数据对象映射到参数对象集合中,并将其他查询子句组合到查询子句表中;解析参数对象集合,将其转换为第一自定义结构化查询语言子表达式;判断所构造的第一自定义结构化查询语言子表达式是否合理,如果不合理,则结束;如果所构造的第一自定义结构化查询语言子表达式合理,则判断参数数据对象中的参数数据类型是否符合规定,如果不符合规定的基本类型,则结束;如果符合规定,则进行赋值操作,将参数数据对象中的数据值赋予对应的参数名,并解析查询子句表,将查询子句添加到第一自定义结构化查询语言子表达式中,形成第二自定义结构化查询语言子表达式;以及根据数据库映射,解析查询子句表,将第二自定义结构化查询语言子表达式转换为动态结构化查询语言语句。2.根据权利要求1所述的动态结构化查询语言语句的构造方法,其特征在于以一维数组的形式组织所述参数数据对象。3.根据权利要求1所述的动态结构化查询语言语句的构造方法,其特征在于以链表的形式组织所述参数数据对象。4.根据权利要求1到3之一所述的动态结构化查询语言语句...
【专利技术属性】
技术研发人员:陈燕霞,洪雷,高锋,李会明,叶帅民,石东海,
申请(专利权)人:联想北京有限公司,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。