CN102193922B - 一种对数据库进行访问的方法和装置 - Google Patents

一种对数据库进行访问的方法和装置 Download PDF

Info

Publication number
CN102193922B
CN102193922B CN 201010119901 CN201010119901A CN102193922B CN 102193922 B CN102193922 B CN 102193922B CN 201010119901 CN201010119901 CN 201010119901 CN 201010119901 A CN201010119901 A CN 201010119901A CN 102193922 B CN102193922 B CN 102193922B
Authority
CN
China
Prior art keywords
sql statement
database
template
statement
function identification
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN 201010119901
Other languages
English (en)
Other versions
CN102193922A (zh
Inventor
余天舒
杨静涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Big Data Technologies Co Ltd
Original Assignee
Hangzhou H3C Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou H3C Technologies Co Ltd filed Critical Hangzhou H3C Technologies Co Ltd
Priority to CN 201010119901 priority Critical patent/CN102193922B/zh
Publication of CN102193922A publication Critical patent/CN102193922A/zh
Application granted granted Critical
Publication of CN102193922B publication Critical patent/CN102193922B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种对数据库进行访问的方法和装置,应用于包含多种类型的数据库模板的数据库访问装置。每种类型的数据库模板中包含该类型数据库的结构化查询语言(SQL)语句以及SQL语句对应的功能标识,数据库模板中具有相同功能的SQL语句对应相同的功能标识;数据库访问装置启动后,加载所有模板;接收到调用指令后,确定当前连接的数据库类型对应的所有SQL语句构成的结果集;在结果集中查询调用指令包含的功能标识对应的SQL语句,执行该SQL语句以实现对数据库的访问。本发明能够在调用方屏蔽数据库的类型差异,降低调用方操作的复杂度,并充分利用各个数据库特有的SQL语句。

Description

一种对数据库进行访问的方法和装置
技术领域
本发明涉及数据库技术,特别涉及一种对数据库进行访问的方法和装置。
背景技术
对数据库的访问通常采用执行结构化查询语言(SQL,Structured QueryLanguage)语句的方式,在此过程中系统将查询参数拼装在SQL语句中,然后执行该SQL语句。
通常系统往往要支持多种数据库,例如SQL Server与Oracle数据库等,在实现相同功能时,不同类型的数据库常常会用到不同的SQL语句。由于现有技术中,SQL语句是编写在代码中的,因此在实现对不同类型数据库某一相同功能的访问时,需要在调用方对数据库类型进行区分,也就是说,针对同一功能需要在方法上对不同数据库类型进行区分,调用方根据不同的数据库类型调用不同的SQL语句。
例如,要对SQL Server与Oracle数据库两种数据库进行查询前N个数据的访问,那么在进行SQL语句编写时,需要在代码中对这两种数据库进行方法上的区分。假设SQL Server对应的方法为Query1,相应的SQL语句为select top N employee_id from tbl_employee order by salary desc;Oracle数据库对应的方法为Query2,相应的SQL语句为select employee_id fromtbl_employee where rownum<=N order by salary desc。在对SQL Server进行查询前N个数据的访问时,在调用方需要调用方法Query1,在对Oracle数据库进行查询前N个数据的访问时,在调用方需要调用方法Query2。然后选择对应的SQL语句,根据用户输入的访问参数对SQL语句中的变量N进行赋值后,执行SQL语句。例如需要查询前10个数据时,将N赋值为10。
可以看出,现有技术中对数据库的访问,需要在调用方实现各数据库类型的差异,针对同一功能的访问,需要在方法上对不同数据库类型进行区分,从而提高了调用方操作的复杂度,当系统中的数据库类型较多时,缺点更加明显。
发明内容
有鉴于此,本发明提供了一种对数据库进行访问的方法和装置,以便于在调用方屏蔽数据库类型的差异,降低调用方操作的复杂度。
一种对数据库进行访问的方法,应用于包含多种类型数据库模板的数据库访问装置,每种类型的数据库模板中包含该类型数据库的SQL语句以及SQL语句对应的功能标识,所述数据库模板中具有相同功能的SQL语句对应相同的功能标识;该方法包括:
A、数据库访问装置启动后,加载所有模板;将各模板中的SQL语句进行解析,分别得到各数据库类型对应的结果集,所述结果集中包含对应数据库的所有SQL语句以及SQL语句对应的功能标识;
B、接收到调用指令后,确定当前连接的数据库类型,并获取当前连接的数据库类型对应的所有SQL语句构成的结果集;
C、在所述结果集中查询所述调用指令包含的功能标识对应的SQL语句,利用所述调用指令中的访问参数对查询到的SQL语句进行赋值,执行赋值后的SQL语句以实现对数据库的访问。
一种对数据库进行访问的装置,该装置包括:SQL模板单元、模板控制单元和SQL执行单元;
所述SQL模板单元,用于存储多种类型的数据库模板,每种类型的数据库模板中包含该类型数据库的SQL语句以及SQL语句对应的功能标识,所述数据库模板中具有相同功能的SQL语句对应相同的功能标识;
所述模板控制单元,用于在所述装置启动后,加载所有模板;
所述SQL执行单元,用于接收到调用指令后,确定当前连接的数据库类型对应的所有SQL语句构成的结果集,在所述结果集中查询所述调用指令包含的功能标识对应的SQL语句,执行该SQL语句以实现对数据库的访问。
由以上技术方案可以看出,本发明通过模板的形式保存各数据库的SQL语言及其对应功能标识,各数据库模板中具有相同功能的SQL语句对应相同的功能标识,使得在调用方进行功能调用时,无需对数据库类型进行调用,仅需要通过调用指令发送要访问的操作对应的功能标识,数据库访问装置便能够从当前连接的数据库类型对应的所有SQL语句构成的结果集中,查询出该功能标识对应的SQL语句,并执行该SQL语句以实现数据库的访问。可以看出,本发明能够在调用方屏蔽数据库的类型差异,降低调用方操作的复杂度。
附图说明
图1为本发明提供的主要方法流程图;
图2为本发明实施例提供的执行层次示意图;
图3为本发明提供的装置结构图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
本发明提供的主要方法可以如图1所示,主要包括以下步骤:
步骤101:预先定义各类型数据库模板,每个数据库模板中包含该类型数据库的SQL语句以及SQL语句对应的功能标识;其中,数据库模板中具有相同功能的SQL语句对应相同的功能标识。
步骤102:访问数据库的装置启动后,加载所有模板。
步骤103:接收到调用指令后,确定当前连接的数据库类型对应的所有SQL语句构成的结果集。
步骤104:在步骤103确定的结果集中,查询调用指令包含的功能标识对应的SQL语句,执行该SQL语句以实现对数据库的访问。
下面结合具体实施例对本发明所提供的上述方法进行详细描述。图2为本发明所提供方法的执行层次示意图,主要分为SQL模板层、模板控制中间层和SQL执行层。对应执行流程可以具体包括以下步骤:
步骤201:预先定义各类型数据库模板,每个数据库模板中包含该类型数据库的SQL语句以及SQL语句对应的功能标识。
在该实施例中,模板中SQL语句及其标识的定义状况可以包括以下几种形式:
第一种形式:仅存在数据库模板,各数据库模板中包含对应类型数据库的SQL语句以及SQL语句对应的功能标识。
假设存在SQL Server数据库、Oracle数据库和MySQL数据库等,则可以根据数据库类型,分别预先定义SQL Server模板、Oracle模板和MySQL模板等。其中,SQL Server模板中存储SQL Server数据库的SQL语句,Oracle模板中存储Oracle数据库的SQL语句,MySQL模板存储MySQL数据库的SQL语句。
各数据库模板中的各SQL语句都存在与其对应的功能标识,在各类型的数据库模板中相同功能的SQL语句对应相同的功能标识,每个功能标识在一个数据库模板中是唯一的。例如,在SQL Server模板中定义query.subsql1=“select top N employee_id from tbl_employee order by salary desc”;在Oracle模板中定义query.subsql1=“select employee_id from tbl_employee whererownum<=N order by salary desc”,由于这两个SQL语句都对应查询前N个数据的功能,因此,对应相同的功能标识query.subsql1。
需要说明的是,在各模板中可以采用扩展标记语言(XML)文件的形式来进行定义,也可以采用“ID=SQL语句”的形式进行定义,本发明中以ID=SQL语句”的形式为例。
第二种形式:由于在某些情况下可能存在多种类型的数据库对应同一功能的SQL语句是相同的,为了对这种情况下的SQL语句进行复用,除了设置各类型数据库模板之外,还可以设置通用语句模板。通用语句模板中存储多种类型数据库的相同SQL语句以及SQL语句对应的功能标识,如图2中SQL模板层所示。
例如,如果某个SQL语句对于SQL Server数据库、Oracle数据库和MvSQL数据库都相同,则可以不在各类型的数据库模板中定义,仅在通用语句模板中定义即可。
第三种形式:为了最大限度地对各类型数据库的SQL语句进行复用,在第二种形式的基础上,可以在通用语句模板的SQL语句中对数据库模板中的功能标识进行引用,被引用的功能标识称为模板变量。即功能标识作为模板变量在数据库模板中定义,在通用语句模板中被引用。
例如,查询数据库中的前N个数据,对应于SQL Server数据库和Oracle数据库,必须采用特定的SQL语句,而其它数据库则采用相同的SQL语句。这种情况下,可以首先在采用特定SQL语句的SQL Server模板中定义query.subsql1=“select top10employee_id from tbl_employee order by salarydesc”。
在Oracle模板中定义query.subsql1=“select employee_id fromtbl_employee where rownum<=10order by salary desc”。
为了最大限度地复用相同的SQL语句,则在通用语句模板中定义query.test=“select N from tbl_employee where employee_id not in,并使该语句引用query.subsql1,以表征query.test和query.subsql1完成相同功能。如果采用“${模板变量}”的方式进行模板变量的引用,则通用语句模板中可以表示为:query.test=“select N from tbl_employee where employee_id notin(${query.subsql1})”。当然,本发明对模板变量的具体引用形式并不限制,还可以采用其它引用形式。
这种方式中,功能标识query.test针对SQL Server数据库对应的SQL语句应该为select top10employee_id from tbl_employee order by salary desc,针对Oracle数据库对应的SQL语句应该为select employee_id from tbl_employeewhere rownum<=10orderby salary desc,针对其它数据库对应的SQL语句为select N from tbl_employee where employee_id not in。
第四种形式:由于在实际使用时,系统可能会新增支持的数据库类型,为了在增加数据库类型的同时,不对已有模板产生影响和修改,可以在上述引用规则的基础上新增一种形式:当数据库模板中的功能标识和通用语句模板中的功能标识相同,而对应的SQL语句不同时,优先使用数据库模板中该功能标识对应的SQL语句。
例如,从数据库中选择特定名称的数据,原有的数据库类型对应的SQL语句均相同,则在通用语句模板中定义query.subsql1=“select*from tbl test”。如果后来新增加了一种类型的数据库SQL Server,而SQL Server对应的选择特定名称的数据对应的SQL语句与其它数据库并不相同,为了不对已有模板产生影响,则可以在SQL Server模板中定义query.subsql1=”select name fromtbl_test”,虽然与通用语句模板中功能标识相同,但对应的SQL语句并不相同,此时,SQL Server数据库中该功能的SQL语句以SQL Server模板中的为准。
第五种形式:在通用模板中定义的功能标识作为模板变量被数据库模板引用。
这种形式通常出现在数据库模板中的SQL语句包含子查询功能的情况下,当数据库模板中相同功能的SQL语句中可能存在一部分SQL语句相同,其它部分的SQL语句不同。通常相同部分的SQL语句具有一定的子查询功能。虽然在数据库模板中该相同功能的SQL语句不完全相同,但在这些SQL语句中相同的SQL语句可以在通用模板中定义,数据库模板中SQL语句对通用模板中的模板变量进行引用即可。
举一个具体的例子,假设功能标识salary.top10对应的功能为:取第2部门的所有员工中薪金最高的前10个人。在SQL Server数据库中,salary.top10对应的SQL语句为:select top10employee.employee_id from(select*from tbl_employee where department_no=2)employee order byemployee.salary desc。在Oracle数据库中,salary.top10对应的SQL语句为:select employee.employee_id from(select*from tbl_employee wheredepartment_no=2)employee where rownum<=10order by employee.salarydesc。
其中,两个SQL语句中具有相同的部分,即select*from tbl_employeewhere department_no=2,该相同的部分用于完成查询第2部门员工的子查询功能。在此,可以将该相同的部分定义在通用语句模板中,并采用模板变量employee.department进行表示,例如表示为:employee.department=(select*from tbl_employee where department_no=2)。然后分别在SQL Server数据库和Oracle数据库的SQL语句中进行引用,分别表示为:salary.top10=select top10employee.employee_id from${employee.department}employee order byemployee.salary desc以及salary.top10=select employee.employee_id from${employee.department}employee where rownum<=10order byemployee.salary desc。
这种形式下,对数据库模板中的SQL语句进行解析时,如果解析到的SQL语句引用了通用语句模板中的功能表示,则利用被引用的功能标识(即模板变量)在通用语句模板中对应的SQL语句替换该解析到的SQL语句中引用功能标识的部分。在上述例子中,解析到salary.top10对应的SQL语句时,将通用语句模板中select*from tbl_employee where department_no=2的SQL语句替换salary.top10对应的SQL语句中的${employee.department}即可。
步骤202:访问数据库的装置启动后,加载所有模板。
本步骤在图2所示的模板控制中间层执行,按照指定的安装目录从SQL模板层中读取全部模板至内存中。
步骤203:将各模板中的SQL语句进行解析和整合,分别得到各数据库类型对应的结果集,结果集中包含对应数据库的所有SQL语句以及SQL语句对应的功能标识。
在本步骤中,按照加载的各模板的中的定义,将各模板都解析成SQL语句对应功能标识的形式。如果模板中存在对模板变量的引用,则SQL语句中会包含模板变量。
如果加载的各模板均为数据库模板,即不存在通用语句模板(对应步骤201中的第一种形式),则直接通过上述解析过程即可获得各类型数据库的SLQ语句集合。
如果加载的各模板中还包括通用语句模板,则在解析之后还会包含整合过程,通过通用语句模板中SQL语句引用的模板变量来整合各数据库的SQL语句。各数据库的结果集除了从对应数据库模板中解析出的内容之外,还可能包含通用语句模板中的内容。对通用语句模板中的各SQL语句进行遍历,对遍历到的SQL语句执行以下操作:
如果当前遍历到的SQL语句没有引用模板变量(对应步骤201中的第二种形式),则将该SQL语句及其功能标识分别添加到各数据库的结果集中;其中在添加时,如果数据库中已经存在要添加的功能标识(对应步骤201中的第四种形式),则不执行添加操作;如果不存在要添加的功能标识,则执行添加操作。
如果当前遍历到的SQL语句引用模板变量(对应步骤201中的第三种形式),则在各数据库的结果集中查找该模板变量,并在查找到该模板变量的结果集中,将该SQL语句对应的功能标识替换查找到的模板变量,并将当前遍历到的SQL语句及其对应的功能标识添加到没有查找到该模板变量的结果集中。
步骤204:当接收到调用方的调用指令时,确定当前连接的数据库类型,并获取当前连接的数据库类型对应的结果集。
本步骤在图2所示的SQL执行层执行。当需要对数据库进行访问时,必先建立与数据库之间的连接,因此,访问数据库的装置在接收到调用方的调用指令时,首先确定当前连接的数据库类型,然后从模板控制中间层获取当前连接的数据库类型对应的结果集。
步骤205:根据调用指令中包含的功能标识,在获取的结果集中查询调用指令中携带的功能标识对应的SQL语句。
在本发明中,调用方不需要对数据库类型进行区分,只需要对数据库访问的功能进行调用,即将包含功能标识的调用指令发送给SQL执行层。由以上描述可以看出,功能标识并没有对数据库类型进行区分。
在步骤204中已经获取了要访问的数据库的所有SQL语句构成的结果集,在该结果集中查询出调用指令中携带的功能标识对应的SQL语句,该SQL语句就是对要访问的数据库执行访问操作对应的SQL语句。
步骤206:利用调用指令中的访问参数对查询的SQL语句进行赋值后,执行SQL语句以实现对数据库的访问。
在调用指令中还可以包含访问参数,利用该访问参数对SQL语句中的访问变量进行赋值。例如,当功能标识对应的访问操作是查询前N个数据时,访问参数可以是具体的N值。
另外,在该赋值过程中,除了对SQL语句中访问变量进行赋值外,还可以包含形式变更以适应SQL语法的需要。例如,当访问变量为字符串时,自动在字符串前后加上单引号;当访问变量为列表或数组时,自动转换成在各数据之间用逗号分隔的形式。
在对SQL语句完成赋值后,执行该SQL语句。如果需要进一步返回查询结果,则可以向调用方返回对数据库的访问结果。
以上是对本发明所提供的方法进行的详细描述,下面对本发明所提供的数据库访问装置进行详细描述。图3为本发明提供的装置结构图,如图3所示,该装置可以包括:SQL模板单元300、模板控制单元310和SQL执行单元320。
SQL模板单元300,用于存储多种类型的数据库模板,每种类型的数据库模板中包含该类型数据库的SQL语句以及SQL语句对应的功能标识,数据库模板中具有相同功能的SQL语句对应相同的功能标识。
模板控制单元310,用于在装置启动后,加载SQL模板单元300中存储的所有模板。
SQL执行单元320,用于接收到调用指令后,确定当前连接的数据库类型对应的所有SQL语句构成的结果集,在结果集中查询调用指令包含的功能标识对应的SQL语句,执行该SQL语句以实现对数据库的访问。
SQL执行单元320可以接收调用方的调用指令,在执行SQL语句实现对数据库的访问后,还可以进一步将访问结果返回给调用方。
上述的SQL模板单元300、模板控制单元310和SQL执行单元320对应图2中的SQL模板层、模板控制中间层和SQL执行层。
其中,模板控制单元310可以包括:模板加载子单元311、模板解析子单元312和结果处理子单元313。
模板加载子单元311,用于在装置启动后,加载所有模板。
模板解析子单元312,用于对加载的所有模板中的SQL语句进行解析。
结果处理子单元313,用于根据解析结果,分别得到各数据库类型对应的结果集,结果集中包含对应数据库的所有SQL语句以及SQL语句对应的功能标识。
更优地,为了对多种类型数据库的相同SQL语句进行复用,SQL模板单元300还存储通用语句模板,通用语句模板中包含多种类型数据库相同的SQL语句以及SQL语句对应的功能标识。
这种情况下,模板控制单元310还可以包括:语句整合子单元314,用于对解析得到的通用语句模板中的各SQL语句进行遍历,将遍历到的SQL语句及其功能标识分别添加到各数据库类型对应的结果集中。
为了最大限度的复用SQL语句,通用语句模板中的SQL语句可以引用数据库模板中的功能标识,其中,被引用的功能标识对应的SQL语句与引用该功能标识的SQL语句具有相同功能。
这种情况下,语句整合子单元314可以具体包括:语句遍历模板3141、第一判断模块3142、添加处理模块3143和标识查找模块3144。
语句遍历模块3141,用于对解析得到的通用语句模板中的各SQL语句进行遍历。
第一判断模块3142,用于判断当前遍历到的SQL语句是否引用了其它功能标识,如果否,向添加处理模块3143发送第一处理通知;如果是,将被引用的功能标识发送给标识查找模块3144。
添加处理模块3143,用于接收到第一处理通知后,将遍历到的SQL语句及其功能标识分别添加到各数据库类型对应的结果集中;接收到第二处理通知后,将当前遍历到的SQL语句及其对应的功能标识添加到没有查找到被引用的功能标识的结果集中。
标识查找模块3144,用于接收到所述被引用的功能标识后,在各数据库类型对应的结果集中查找被引用的功能标识,将查找到被引用的功能标识的结果集中,将当前遍历到的SQL语句对应的功能标识替换查找到的结果集中被引用的功能标识,并向添加处理模块3143发送第二处理通知。
更进一步地,当SQL模板单元300中新增一种类型的数据库模板时,如果新增的数据库模板中存在与通用语句模板中具有相同功能的不同SQL语句时,该具有相同功能的不同SQL语句采用相同的功能标识。
这种情况下,语句整合子单元314还可以进一步包括:第二判断模块3145,用于在添加处理模块3143在将遍历到的SQL语句及其功能标识添加到结果集中之前,判断要添加到的结果集中是否已经存在要添加的功能标识,如果是,则禁止添加处理模块3143将遍历到的SQL语句及其功能标识添加到结果集中,否则,允许添加处理模块3143将遍历到的SQL语句及其功能标识添加到结果集中。
还有一种情况,数据库模板中的SQL语句可以引用通用语句模板中的功能标识。模板解析子单元312在对数据库模板中的SQL语句进行解析时,如果解析到的SQL语句引用了通用语句模板中的功能标识,则利用被引用的功能标识在通用语句模板中对应的SQL语句替换解析到的SQL语句中引用功能标识的部分。
另外,上述SQL执行单元320可以具体包括:类型确定子单元321、语句查询子单元322、变量赋值子单元323和语句执行子单元324。
类型确定子单元321,用于接收到调用指令后,确定当前连接的数据库类型对应的所有SQL语句构成的结果集。
语句查询子单元322,用于在类型确定子单元321确定的结果集中,查询调用指令包含的功能标识对应的SQL语句。
变量赋值子单元323,用于利用调用指令中的访问参数对语句查询子单元322查询到的SQL语句进行赋值。
语句执行子单元324,用于执行赋值后的SQL语句以实现对数据库的访问。
由以上描述可以看出,本发明提供的方法和装置可以具备以下优点:
1)本发明通过模板的形式保存各数据库的SQL语言及其对应功能标识,各数据库模板中具有相同功能的SQL语句对应相同的功能标识,使得在调用方进行功能调用时,无需对数据库类型进行调用,仅需要通过调用指令发送要访问的操作对应的功能标识,数据库访问装置便能够从当前连接的数据库类型对应的所有SQL语句构成的结果集中,查询出该功能标识对应的SQL语句,并执行该SQL语句以实现数据库的访问。可以看出,本发明能够在调用方屏蔽数据库的类型差异,降低调用方操作的复杂度。
2)在本发明中通过设置通用语句模板来存储多种类型数据库相同的SQL语句及其对应的功能标识,并可以进一步结合功能标识作为模板变量的引用功能,最大限度地复用各类型数据库中相同的SQL语句。
3)当在数据库访问装置支持新的类型的数据库时,在数据库访问装置中新增对应的数据库模板,当新增的数据库模板中存在与通用语句模板中具有相同功能的不同SQL语句时,采用与通用语句模板中相同的功能标识,并且在对该数据库执行该功能标识时,采用该数据库模板中该功能标识对应的SQL语句。这种渐进式的增加方式,使得在新增加模板时,不会对已有模板中的内容产生影响。
4)采用模板的方式定义各数据库的SQL语句,相比较在代码中编写各数据库的SQL语句的方式,在进行修改和维护时仅需要对模板中的定义进行变更而不必修改已有代码,使得修改和维护更加简单和方便。
5)在各模板中采用功能标识对SQL语句进行标识,并对各数据库模板中具有同一功能的SQL语句采用相同的功能标识,增强了SQL语句的可阅读性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (11)

1.一种对数据库进行访问的方法,其特征在于,应用于包含多种类型数据库模板的数据库访问装置,每种类型的数据库模板中包含该类型数据库的结构化查询语言SQL语句以及SQL语句对应的功能标识,所述数据库模板中具有相同功能的SQL语句对应相同的功能标识;该方法包括:
A、数据库访问装置启动后,加载所有模板;将各模板中的SQL语句进行解析,分别得到各数据库类型对应的结果集,所述结果集中包含对应数据库的所有SQL语句以及SQL语句对应的功能标识;
B、接收到调用指令后,确定当前连接的数据库类型,并获取当前连接的数据库类型对应的所有SQL语句构成的结果集;
C、在所述结果集中查询所述调用指令包含的功能标识对应的SQL语句,利用所述调用指令中的访问参数对查询到的SQL语句进行赋值,执行赋值后的SQL语句以实现对数据库的访问。
2.根据权利要求1所述的方法,其特征在于,所述数据库访问装置还包含通用语句模板,用于存储多种类型数据库相同的SQL语句以及SQL语句对应的功能标识;
在所述将各模板中的SQL语句进行解析之后还包括:对通用语句模板中的各SQL语句进行遍历,将遍历到的SQL语句及其功能标识分别添加到各数据库类型对应的结果集中。
3.根据权利要求2所述的方法,其特征在于,所述通用语句模板中的SQL语句引用所述数据库模板中的功能标识,被引用的功能标识对应的SQL语句与引用该功能标识的SQL语句具有相同功能;
在所述将遍历到的SQL语句及其功能标识分别添加到各数据库类型对应的结果集中之前还包括:判断当前遍历到的SQL语句是否引用了其它功能标识,如果否,继续执行所述将遍历到的SQL语句及其功能标识分别添加到各数据库类型对应的结果集中;如果是,在各数据库类型对应的结果集中查找被引用的功能标识,在查找到被引用的功能标识的结果集中,将所述当前遍历到的SQL语句对应的功能标识替换查找到的结果集中被引用的功能标识,并将所述当前遍历到的SQL语句及其对应的功能标识添加到没有查找到被引用的功能标识的结果集中。
4.根据权利要求2或3所述的方法,其特征在于,当在数据库访问装置中新增一种类型的数据库模板时,如果该新增的数据库模板中存在与通用语句模板中具有相同功能的不同SQL语句时,该具有相同功能的不同SQL语句采用相同的功能标识;
在将遍历到的SQL语句及其功能标识添加到结果集中之前,还包括:判断要添加到的结果集中是否已经存在要添加的功能标识,如果是,则不将遍历到的SQL语句及其功能标识添加到结果集中,否则,将遍历到的SQL语句及其功能标识添加到结果集中。
5.根据权利要求2所述的方法,其特征在于,数据库模板中的SQL语句引用所述通用语句模板中的功能标识;
在对数据库模板中的SQL语句进行解析时,如果解析到的SQL语句引用了通用语句模板中的功能标识,则利用被引用的功能标识在通用语句模板中对应的SQL语句替换所述解析到的SQL语句中引用功能标识的部分。
6.一种对数据库进行访问的装置,其特征在于,该装置包括:SQL模板单元、模板控制单元和SQL执行单元;
所述SQL模板单元,用于存储多种类型的数据库模板,每种类型的数据库模板中包含该类型数据库的SQL语句以及SQL语句对应的功能标识,所述数据库模板中具有相同功能的SQL语句对应相同的功能标识;
所述模板控制单元,用于在所述装置启动后,加载所有模板;
所述SQL执行单元,用于接收到调用指令后,确定当前连接的数据库类型,并获取当前连接的数据库类型对应的所有SQL语句构成的结果集,在所述结果集中查询所述调用指令包含的功能标识对应的SQL语句,利用所述调用指令中的访问参数对查询到的SQL语句进行赋值,执行赋值后的SQL语句以实现对数据库的访问;
所述模板控制单元包括:模板加载子单元、模板解析子单元和结果处理子单元;所述模板加载子单元,用于在所述装置启动后,加载所有模板;所述模板解析子单元,用于对加载的所有模板中的SQL语句进行解析;所述结果处理子单元,用于根据解析结果,分别得到各数据库类型对应的结果集,所述结果集中包含对应数据库的所有SQL语句以及SQL语句对应的功能标识。
7.根据权利要求6所述的装置,其特征在于,所述SQL模板单元还存储通用语句模板,通用语句模板中包含多种类型数据库相同的SQL语句以及SQL语句对应的功能标识;
所述模板控制单元还包括:语句整合子单元,用于对解析得到的通用语句模板中的各SQL语句进行遍历,将遍历到的SQL语句及其功能标识分别添加到各数据库类型对应的结果集中。
8.根据权利要求7所述的装置,其特征在于,所述通用语句模板中的SQL语句引用所述数据库模板中的功能标识,被引用的功能标识对应的SQL语句与引用该功能标识的SQL语句具有相同功能;
所述语句整合子单元具体包括:语句遍历模板、第一判断模块、添加处理模块和标识查找模块;
所述语句遍历模块,用于对解析得到的通用语句模板中的各SQL语句进行遍历;
所述第一判断模块,用于判断当前遍历到的SQL语句是否引用了其它功能标识,如果否,向所述添加处理模块发送第一处理通知;如果是,将被引用的功能标识发送给所述标识查找模块;
所述添加处理模块,用于接收到第一处理通知后,将遍历到的SQL语句及其功能标识分别添加到各数据库类型对应的结果集中;接收到第二处理通知后,将所述当前遍历到的SQL语句及其对应的功能标识添加到没有查找到被引用的功能标识的结果集中;
所述标识查找模块,用于接收到所述被引用的功能标识后,在各数据库类型对应的结果集中查找所述被引用的功能标识,将查找到被引用的功能标识的结果集中,将所述当前遍历到的SQL语句对应的功能标识替换查找到的结果集中被引用的功能标识,并向所述添加处理模块发送第二处理通知。
9.根据权利要求8所述的装置,其特征在于,当所述SQL模板单元中新增一种类型的数据库模板时,如果新增的数据库模板中存在与通用语句模板中具有相同功能的不同SQL语句时,该具有相同功能的不同SQL语句采用相同的功能标识;
所述语句整合子单元还包括:第二判断模块,用于在所述添加处理模块在将遍历到的SQL语句及其功能标识添加到结果集中之前,判断要添加到的结果集中是否已经存在要添加的功能标识,如果是,则禁止所述添加处理模块将遍历到的SQL语句及其功能标识添加到结果集中,否则,允许所述添加处理模块将遍历到的SQL语句及其功能标识添加到结果集中。
10.根据权利要求7所述的装置,其特征在于,所述数据库模板中的SQL语句引用所述通用语句模板中的功能标识;
所述模板解析子单元在对数据库模板中的SQL语句进行解析时,如果解析到的SQL语句引用了通用语句模板中的功能标识,则利用被引用的功能标识在通用语句模板中对应的SQL语句替换所述解析到的SQL语句中引用功能标识的部分。
11.根据权利要求6至10任一权项所述的装置,其特征在于,所述SQL执行单元具体包括:类型确定子单元、语句查询子单元、变量赋值子单元和语句执行子单元;
所述类型确定子单元,用于接收到调用指令后,确定当前连接的数据库类型对应的所有SQL语句构成的结果集;
所述语句查询子单元,用于在所述类型确定子单元确定的结果集中,查询所述调用指令包含的功能标识对应的SQL语句;
所述变量赋值子单元,用于利用所述调用指令中的访问参数对所述语句查询子单元查询到的SQL语句进行赋值;
所述语句执行子单元,用于执行赋值后的SQL语句以实现对数据库的访问。
CN 201010119901 2010-03-04 2010-03-04 一种对数据库进行访问的方法和装置 Active CN102193922B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010119901 CN102193922B (zh) 2010-03-04 2010-03-04 一种对数据库进行访问的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010119901 CN102193922B (zh) 2010-03-04 2010-03-04 一种对数据库进行访问的方法和装置

Publications (2)

Publication Number Publication Date
CN102193922A CN102193922A (zh) 2011-09-21
CN102193922B true CN102193922B (zh) 2013-07-24

Family

ID=44602005

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010119901 Active CN102193922B (zh) 2010-03-04 2010-03-04 一种对数据库进行访问的方法和装置

Country Status (1)

Country Link
CN (1) CN102193922B (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708142B (zh) * 2012-03-14 2014-04-02 北京思特奇信息技术股份有限公司 一种通过sql定制模板获取后台数据的方法和系统
CN103514185B (zh) * 2012-06-20 2017-09-29 北京四维图新科技股份有限公司 导航地图多个更新区域的数据库文件访问管理方法及装置
JP5518266B1 (ja) * 2013-05-17 2014-06-11 三菱電機株式会社 プログラマブルコントローラとその周辺装置、およびプログラマブルコントローラのテーブルデータアクセスプログラム
CN104346378B (zh) * 2013-07-31 2019-02-05 腾讯科技(深圳)有限公司 一种实现复杂数据处理的方法、装置及系统
CN103473306A (zh) * 2013-09-10 2013-12-25 北京思特奇信息技术股份有限公司 一种采用sql标记替换法实现数据自取的方法及系统
CN104679453B (zh) * 2013-12-03 2018-01-16 航天信息股份有限公司 一种信息录入、储存及排版打印的通用系统及方法
CN104166737B (zh) * 2014-09-04 2018-02-02 北京国双科技有限公司 用于数据库名称的修改方法和装置
CN105589686B (zh) * 2014-11-14 2021-03-02 航天信息股份有限公司 WinCE平台下基于模板的信息录入、打印方法和装置
CN104484392B (zh) * 2014-12-11 2018-02-02 北京国双科技有限公司 数据库查询语句生成方法及装置
CN104932904A (zh) * 2015-07-14 2015-09-23 福建农林大学 一种针对智能家居的可配置数据库编程模式
CN105468717B (zh) * 2015-11-20 2020-11-10 北京百度网讯科技有限公司 数据库操作方法和装置
CN105550206B (zh) * 2015-12-01 2019-10-29 珠海多玩信息技术有限公司 结构化查询语句的版本控制方法及装置
CN107122364B (zh) * 2016-02-25 2021-05-18 华为技术有限公司 数据操作方法和数据管理服务器
CN107229628B (zh) * 2016-03-23 2022-02-01 金篆信科有限责任公司 分布式数据库预处理的方法及装置
CN106294565A (zh) * 2016-07-27 2017-01-04 中国农业银行股份有限公司 一种数据库访问方法及系统
CN106257460A (zh) * 2016-08-24 2016-12-28 天津天大求实电力新技术股份有限公司 用于微电网监控系统的数据库通用访问实现方法
CN107943466B (zh) * 2016-10-13 2021-06-01 腾讯科技(深圳)有限公司 数据库访问语句生成方法、装置及设备
CN106657409A (zh) * 2017-02-27 2017-05-10 郑州云海信息技术有限公司 一种云环境下监控项的信息获取方法及装置
CN107169047A (zh) * 2017-04-25 2017-09-15 腾讯科技(深圳)有限公司 一种实现数据缓存的方法及装置
CN107766431B (zh) * 2017-09-18 2020-07-03 杭州安恒信息技术股份有限公司 一种基于语法解析的去参数化功能方法及系统
CN107844519A (zh) * 2017-10-09 2018-03-27 平安科技(深圳)有限公司 电子装置、数据库查询脚本生成方法及存储介质
CN110765151A (zh) * 2018-07-27 2020-02-07 北京国双科技有限公司 一种计算公式处理方法及装置
CN109871408B (zh) * 2019-03-05 2023-07-14 深圳市迅雷网络技术有限公司 一种多类型数据库适配方法、装置、电子设备及存储介质
CN112883048B (zh) * 2019-11-29 2024-06-04 阿里巴巴集团控股有限公司 一种数据访问方法、装置、服务器及可读存储介质
CN112163000A (zh) * 2020-08-31 2021-01-01 阿里巴巴集团控股有限公司 一种数据查询方法和装置
CN114298008A (zh) * 2021-12-14 2022-04-08 苏州瀚码智能技术有限公司 一种Excel,CSV文件上传解析入库支持自定义表结构的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6604095B1 (en) * 1999-09-21 2003-08-05 International Business Machines Corporation Method, system, program, and data structure for pivoting columns in a database table
CN101004683A (zh) * 2007-01-31 2007-07-25 华为技术有限公司 数据库访问方法和装置
CN101158975A (zh) * 2007-11-21 2008-04-09 金蝶软件(中国)有限公司 一种访问不同类型数据库的方法和系统
CN101645074A (zh) * 2009-09-07 2010-02-10 浪潮集团山东通用软件有限公司 一种访问不同类型关系型数据库的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6604095B1 (en) * 1999-09-21 2003-08-05 International Business Machines Corporation Method, system, program, and data structure for pivoting columns in a database table
CN101004683A (zh) * 2007-01-31 2007-07-25 华为技术有限公司 数据库访问方法和装置
CN101158975A (zh) * 2007-11-21 2008-04-09 金蝶软件(中国)有限公司 一种访问不同类型数据库的方法和系统
CN101645074A (zh) * 2009-09-07 2010-02-10 浪潮集团山东通用软件有限公司 一种访问不同类型关系型数据库的方法

Also Published As

Publication number Publication date
CN102193922A (zh) 2011-09-21

Similar Documents

Publication Publication Date Title
CN102193922B (zh) 一种对数据库进行访问的方法和装置
EP1193618B1 (en) Cost based materialized view selection for query optimization
US7707168B2 (en) Method and system for data retrieval from heterogeneous data sources
CN1761962B (zh) 将非结构化数据实时聚集为结构化数据以便关系数据库引擎进行sql处理
US6829606B2 (en) Similarity search engine for use with relational databases
Simitsis et al. State-space optimization of ETL workflows
US7680781B1 (en) Automatic search query generation and results set management
US8156134B2 (en) Using different groups of query graph transform modules to generate execution plans for queries for different database types
CN100481076C (zh) 关系型数据库与全文检索相结合的检索方法
US10437804B1 (en) Storing graph data representing workflow management
US6925462B2 (en) Database management system, and query method and query execution program in the database management system
US20180067987A1 (en) Database capable of integrated query processing and data processing method thereof
US20040128276A1 (en) System and method for accessing data in disparate information sources
US20080140696A1 (en) System and method for analyzing data sources to generate metadata
US20170337232A1 (en) Methods of storing and querying data, and systems thereof
CN107291471B (zh) 一种支持可定制化数据采集的元模型框架系统
US9141665B1 (en) Optimizing search system resource usage and performance using multiple query processing systems
CN100578498C (zh) 数据集成服务系统及方法
US20050010606A1 (en) Data organization for database optimization
CN105718593A (zh) 一种数据库查询优化方法及系统
CN103164455B (zh) 数据库的优化方法及装置
CN109947770A (zh) 一种数据库查询方法、终端设备及存储介质
CN102708203A (zh) 一种基于xml元数据的数据库动态管理方法
CN110019314B (zh) 基于数据项分析的动态数据封装方法、客户端和服务端
CN108776678B (zh) 基于移动端NoSQL数据库的索引创建方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP03 Change of name, title or address

Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No.

Patentee after: Xinhua three Technology Co., Ltd.

Address before: 310053 Hangzhou hi tech Industrial Development Zone, Zhejiang province science and Technology Industrial Park, No. 310 and No. six road, HUAWEI, Hangzhou production base

Patentee before: Huasan Communication Technology Co., Ltd.

CP03 Change of name, title or address
TR01 Transfer of patent right

Effective date of registration: 20180720

Address after: 450000 Grand View B18 building, 166 Du Ying Street, hi tech Industrial Development Zone, Zhengzhou, Henan

Patentee after: Xinhua three major data Technology Co., Ltd.

Address before: 310052 Changhe Road, Binjiang District, Hangzhou, Zhejiang Province, No. 466

Patentee before: Xinhua three Technology Co., Ltd.

TR01 Transfer of patent right