CN116089542A - 基于jdbc的数据库适配方法以及装置 - Google Patents
基于jdbc的数据库适配方法以及装置 Download PDFInfo
- Publication number
- CN116089542A CN116089542A CN202310063805.XA CN202310063805A CN116089542A CN 116089542 A CN116089542 A CN 116089542A CN 202310063805 A CN202310063805 A CN 202310063805A CN 116089542 A CN116089542 A CN 116089542A
- Authority
- CN
- China
- Prior art keywords
- database
- target
- jdbc
- grammar
- agent
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2452—Query translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供基于JDBC的数据库适配方法以及装置,其中所述基于JDBC的数据库适配方法应用于JAVA虚拟机,包括:加载目标应用程序,其中,所述目标应用程序与至少一种类型的数据库连接;为每个数据库生成对应的代理实例,其中,每个代理实例中包括JDBC代理和数据库语法转换器;获取初始SQL语句;根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,获得每个数据库对应的目标SQL语句;此种方式可无需对已有的目标应用程序进行再次开发,即可适配各种类型的数据库,能够自适应匹配于原不支持类型的数据库,降低了额外开发的成本及测试成本。
Description
技术领域
本说明书实施例涉及计算机技术领域,特别涉及一种基于JDBC的数据库适配方法。
背景技术
数据库在各应用系统中起着重要作用,包括数据的持久化、数据的管理及非常方便的获取数据。应用在不同场景下有在不同数据库产品切换的需求,如性能的需求、信创(通用)的需求、复用数据库的需求、系统整合的需求等。
由于各数据库产品存在SQL语法的差异(包括数据类型的差异、运算符的差异、函数的差异、SQL的差异、元数据信息的差异)导致应用在切换不同厂商数据库时需要适配SQL语法改造,增加了额外的研发及测试成本,同时也造成发布物版本数量的激增及实施的难度加大。
发明内容
有鉴于此,本说明书实施例提供了一种基于JDBC的数据库适配方法。本说明书一个或者多个实施例同时涉及一种基于JDBC的数据库适配装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种基于JDBC的数据库适配方法,应用于JAVA虚拟机,包括:
加载目标应用程序,其中,所述目标应用程序与至少一种类型的数据库连接;
为每类数据库生成对应的代理实例,其中,每个代理实例中包括JDBC代理和数据库语法转换器;
获取初始SQL语句;
根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,获得每类数据库对应的目标SQL语句。
根据本说明书实施例的第二方面,提供了一种基于JDBC的数据库适配装置,包括:
程序加载模块,被配置为加载目标应用程序,其中,所述目标应用程序与至少一种类型的数据库连接;
实例生成模块,被配置为为每类数据库生成对应的代理实例,其中,每个代理实例中包括JDBC代理和数据库语法转换器;
语句获取模块,被配置为获取初始SQL语句;
语句转换模块,被配置为根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,获得每类数据库对应的目标SQL语句。
根据本说明书实施例的第三方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述基于JDBC的数据库适配方法的步骤。
根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述基于JDBC的数据库适配方法的步骤。
根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述基于JDBC的数据库适配方法的步骤。
本说明书一个实施例提供了基于JDBC的数据库适配方法,应用于JAVA虚拟机,包括:加载目标应用程序,其中,所述目标应用程序与至少一种类型的数据库连接;为每类数据库生成对应的代理实例,其中,每个代理实例中包括JDBC代理和数据库语法转换器;获取初始SQL语句;根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,获得每类数据库对应的目标SQL语句。
通过为与目标应用程序连接的各种类型的数据库,生成对应的代理实例,并利用JDBC代理,通过数据库语法转换器对初始SQL语句进行语法转换,以获得各种类型数据库对应的目标SQL语句;此种方式可无需对已有的目标应用程序进行再次开发,即可适配各种类型的数据库,能够自适应匹配于原不支持类型的数据库,对于使用者来说,是在一种无感知无侵入的状态下,可以使用各种类型的数据库,无需学习各数据库产品存在的SQL语法差异,降低了额外开发的成本及测试成本。
附图说明
图1是本说明书一个实施例提供的一种基于JDBC的数据库适配方法的结构示意图;
图2是本说明书一个实施例提供的一种基于JDBC的数据库适配方法的流程图;
图3是本说明书一个实施例提供的一种基于JDBC的数据库适配方法中应用程序启动流程图;
图4是本说明书一个实施例提供的一种基于JDBC的数据库适配方法中SQL语法转换器流程图;
图5是本说明书一个实施例提供的一种基于JDBC的数据库适配方法中多数据源支持及缓存机制示意图;
图6是本说明书一个实施例提供的一种基于JDBC的数据库适配装置的结构示意图;
图7是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
JVM:是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机。
class文件:全名称为Javaclass文件,为Java程序提供独立于底层主机平台的二进制形式的服务。被连接成单独的、专门支持特定硬件平台和操作系统的二进制文件。
Java数据库连接:(JavaDatabaseConnectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法;即使用Java语言操作数据库;通过控制台或客户端操作的数据库,JDBC是用Java语言来发送SQL语句。
JVMTI(JVMToolInterface):是Java虚拟机所提供的本地编程接口,是JVMPI(JavaVirtual MachineProfilerInterface)和JVMDI(JavaVirtualMachineDebugInterface)的更新版本。
Classloader类加载器:用来加载Java类到Java虚拟机中的一种加载器。
Class文件:本质上是一个以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在class文件中。jvm根据其特定的规则解析该二进制数据,从而得到相关信息。Class文件采用一种伪结构来存储数据,它有两种类型:无符号数和表。
MyBatis:一个持久层框架,它对JDBC的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
持久层:是把数据可以永久保持的存储到设备中,不像放到内存中那样断电就消失,一般来说,持久层为直接的理解就是对数据库的各种操作,如CRUD(增加、删除、修改、查询),更新等操作。
Javaagent(Java代理)技术的主要功能如下:可以在加载java文件之前做拦截,把字节码做修改;可以在运行期将已经加载的类的字节码做变更。
抽象语法树(AST):是用一种形式语言编写的文本(通常是源代码)的抽象语法结构的树状表示。树上的每个节点都表示文本中出现的一个结构。
数据库在各应用系统中起着重要作用,是应用系统不可或缺的组成。应用系统在不同的行业、场景下存在适配不同数据库产品的需求。由于各数据库产品SQL语法的差异,应用系统需要进行改造以适配不同的数据库。在通用化需求爆发式增长的前景下,如何方便、快捷、低成本的适配不同数据库产品技术需求变的尤为重要。
目前,可以通过对SQL转换的方式以适用各种数据库,但该种方式主要针对MyBatis的xml结构进行转换,使用范围较局限并需要源码进行转换;只能作为开发辅助工具,不能在线运行;并且应用系统需要重新组织代码结构并重新编译发布,不能解决发布物版本数量的激增问题。
基于此,本申请实施例提供了一种无感知无侵入的数据库自适应适配方法,对已有的应用,零开发即可实现对未适配数据库产品的适配,方便快捷的实现产品的通用性适配;或对新开发应用只需采用适配一种数据库架构,大量节约开发成本并通过屏蔽数据库差异提高产品稳定性。
在本说明书中,提供了一种基于JDBC的数据库适配方法,本说明书同时涉及一种基于JDBC的数据库适配装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
参见图1,图1是本说明书一个实施例提供的一种基于JDBC的数据库适配方法的结构示意图。
需要说明的是,本实施例提供的基于JDBC的数据库适配方法应用于JAVA虚拟机,在该JAVA虚拟机中运行应用程序,为了实现该应用程序使用与其连接的多种类型的目标数据库,可对该多种类型的目标数据库执行自适应适配工作。
具体实施时,在JAVA虚拟机中,利用JAVA探针技术,在应用程序中代理JDBC,生成代理类字节码,并利用语法转换器对SQL语句进行转换,并将执行转换后的SQL语句,发送至数据库连接层,以实现与各种类型的数据库进行连接;需要说明的是,每种类的目标数据库都通过对应的代理类字节码进行语法转换。
实际应用中,在JAVA虚拟机中运行类是通过classLoader加载的.class文件进行生成的。在classLoader加载.class文件生成对应的类对象之前,通过配置JAVA虚拟机参数-javaagent对需要加载的.class文件进行过滤。当为JDBC类时,获取该JDBC的类型、版本等信息,生成对应的代理字节码及对应的SQL语法转换器,通过JVMIT对原JDBC类进行代理,以完成应用程序的启动,实现了多种类型的数据库自适应适配的过程。
通过JAVA探针模式,自动匹配目标数据库的SQL转换机制,对各类目标数据库对应的SQL语句利用相应的语法转换器进行转换,以实现根据该数据库适配架构,实现了对多种类的数据库的自适应适配。
参见图2,图2示出了根据本说明书一个实施例提供的一种基于JDBC的数据库适配方法的流程图,具体包括以下步骤。
需要说明的是,本实施例提供的方法应用于JAVA虚拟机,即可以理解为JAVA虚拟机在加载类文件的时候,探针会过滤每个类(根据类名),发现是JDBC类的时候,会修改原来的JDBC类,主要是修改原类的方法,动态编译出对应的代理类字节码,然后用编译出的代理类字节码替换原JDBC的部分方法;以实现开发人员不用做任何开发,只要进行简单的配置就能实现原先不支持的数据库能够对应用程序支持使用,主要场景是针对当前通用化的大背景下,对应用系统进行适配调整的过程。
步骤202:加载目标应用程序,其中,所述目标应用程序与至少一种类型的数据库连接。
实际应用中,JAVA虚拟机加载目标应用程序,该目标应用程序与至少一种类型的数据库相连接,且为了实现无感知无侵入的数据库自适应适配,采用适配一种数据库架构,以便于对该目标应用程序零开发,即可适配多种类型的数据库产品。需要说明的是,目标应用程序可以理解为预先开发的任何一种类型的应用程序,且可以与多种类型的数据库相连接使用,本实施例对目标应用程序的类型不作限定。
步骤204:为每类数据库生成对应的代理实例,其中,每个代理实例中包括JDBC代理和数据库语法转换器。
为了实现数据库适配过程无感知,本实施例提供的方式是为每种类型的数据库,生成对应的代理实例,其中,每个代理实例中均包括JDBC代理和数据库语法转换器;JDBC代理可以在加载java文件之前做拦截,把字节码做修改,数据库语法转换器可以对一种类型的SQL语句进行语法转换,转换为另一种类型的SQL语句。
具体的,所述为每类数据库生成对应的代理实例,包括:
基于JAVA探针,在探测到所述目标应用程序对应的JDBC接口的情况下,确定与所述目标应用程序连接的至少一种数据库类型;
为每种数据库类型对应的数据库,生成对应的代理实例。
实际应用中,可以利用JAVA探针技术,即JAVA字节码注入技术,动态修改加载的类文件,在JAVA探针探测到目标应用程序对应的JDBC接口的情况下,可确定与该目标应用程序连接的至少一种数据库类型,并为每种数据库类型对应的数据库生成对应的代理实例,从而支持各种类型数据库的适配。
进一步地,可通过确定JDBC类型,以识别数据库的类型;具体的,所述确定与所述目标应用程序连接的至少一种数据库类型,包括:
基于所述JDBC接口,确定所述JDBC的属性信息;
根据所述属性信息,确定与所述目标应用程序连接的至少一种数据库类型。
实际应用中,根据JDBC接口,确定JDBC类型,并根据JDBC类型自动识别目标数据库类型,需要说明的是,目标应用程序与不同类型的数据库相连接,能够根据JDBC接口的类型以确定各种数据库类型,便于后续为不同类型的数据库生成代理实例。
步骤206:获取初始SQL语句。
实际应用中,目标应用程序的应用层可获取到初始SQL语句,该初始SQL语句可以理解为针对JAVA语言的SQL语句,且无法直接被各种类型的数据库读取,需要将其转换为符合数据库的语法条件的语句,才能正常执行相应的操作,其中,初始SQL语句不局限于查询语句,包括所有CURD语句,比如当前应用程序中已实现建表、查询、插入、更新、批量更新等执行语句。
需要说明的是,可通过拦截目标应用程序发送至数据库的SQL语句,来获取目标应用程序传递的待执行语句,便于后续对待执行语句进行转换处理后发送至数据库执行。
步骤208:根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,获得每类数据库对应的目标SQL语句。
为了实现对目标应用程序的零开发,在加载类文件之前,需要对JDBC字节码进行相应地调整,即可根据每个代理实例中的JDBC代理和对应的数据库语法转换器,对初始SQL语句进行转换,获得每种类型的数据库对应的目标SQL语句,其中,目标SQL语句可以理解为将初始SQL语句转换为与对应的数据库类型相匹配的语法的SQL语句;进而,该目标SQL语句可在数据库中执行增删改查等操作,完成了在目标应用程序无繁琐的配置的情况下,可适配多种类型的数据库的功能。
基于此,本申请实施例提供了一种应用程序启动流程;具体参见图3,图3是本说明书一个实施例提供的一种基于JDBC的数据库适配方法中应用程序启动流程图;
步骤302:修改JVM参数,通过JAVA代理参数启动应用程序。
步骤304:过滤类加载加载.class文件,对JDBCConnection生成匹配的代理类字节码注入JVM进行代理。
步骤306:根据目标数据库类型,生成SQL语法转换器。
步骤308:应用程序主函数main执行。
进一步地,通过每个代理实例的JDBC代理和数据库语法转换器,可以实现对初始SQL语句进行在线转换;具体的,所述根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,包括:
确定目标代理实例中的目标JDBC代理和目标数据库语法转换器;
基于所述目标JDBC代理,采集所述初始SQL语句;
通过所述目标数据库语法转换器,对所述初始SQL语句进行转换。
实际应用中,以一个代理实例进行语法转换为例进行说明,先在多个代理实例中确定一个目标代理实例,该目标代理实例中包括目标JDBC代理和目标数据库语法转换器,进而,目标JDBC代理可采集到初始SQL语句,再根据目标代理实例中的目标数据库语法转换器对该初始SQL语句进行在线转换。
更进一步地,每个代理实例中的数据库语法转换器可包括相应的语法转换规则,以适应于对各种类型的数据库的适配;具体的,所述通过所述目标数据库语法转换器,对所述初始SQL语句进行转换,包括:
通过所述目标数据库语法转换器,确定所述初始SQL语句对应的目标语法转换规则;
根据所述目标语法转换规则,对所述初始SQL语句进行转换。
实际应用中,不同的语法转换器具有不同的语法转换规则,可通过目标数据库语法转换器确定对初始SQL语句进行语法转换的目标语法转换规则,比如MySQL数据库对应的语法转换规则,可将初始SQL语句转换为MySQL数据库能够识别的查询语句。
对该初始SQL语句进行格式转换时,需要对该查询语句的词法、语法、语义等多个方面进行转换;具体的,所述根据所述目标语法转换规则,对所述初始SQL语句进行转换,包括:
解析所述初始SQL语句,生成抽象语法树;
遍历所述抽象语法树,根据所述目标语法转换规则对所述抽象语法树中的语法结构进行转换;
其中,所述语法结构包括基本组成单元、函数、元素。
实际应用中,可对初始SQL语句进行解析,生成抽象语法树,包括词法解析、语法解析、语义解析等,本实施例对此不作限定;进一步地,可通过遍历抽象语法树,对基本组成单元(如子查询、方法块、子SQL等)、函数、元素(如列名、关键字等)按规则进行转换。
通过对初始SQL语句进行语法转换,以便于适用于相应的数据库,完成对各种类型数据库的自适应适配。
此外,由于SQL语法转换器需要消耗较多的CPU时间,每个代理实例建立转换缓存,可以较大程度上降低了SQL转换的性能损失,因此,本申请实施例提供的方法在代理实例中还可配置缓存空间,可以预先缓存已经转换后的查询语句,便于后续直接从缓存空间直接获取,无需重复在线语法转换的过程;具体的,所述代理实例还包括转换缓存数据库;
相应地,所述通过所述目标数据库语法转换器,对所述初始SQL语句进行转换之前,还包括:
判断所述转换缓存数据库中,是否存在所述初始SQL语句对应的目标SQL语句,
若是,则返回所述目标SQL语句;
若否,则执行通过所述目标数据库语法转换器,对所述初始SQL语句进行转换的步骤。
实际应用中,在对初始SQL语句进行在线转换之前,还可执行一个判断逻辑,以判断在转换缓存数据库中,是否存在该初始SQL语句进行语法转换后的目标SQL语句,若存在,则可直接返回预先已缓存的目标SQL语句,若不存在,则需要执行在线缓存的步骤。进一步地,在执行了在线转换后,还可将在线转换后的查询语句缓存至转换缓存数据库,便于后续可直接从转换缓存数据库中查找,节省CPU计算成本。
图4是本说明书一个实施例提供的一种基于JDBC的数据库适配方法中SQL语法转换器流程图。
图4中可为SQL语法转换器,包括SQL语法分析、AST规则转换替换和生成目标SQL三个阶段。
步骤402:JDBC代理采集需要执行的SQL语句。
步骤404:判断是否存在已缓存的转换后的目标方言SQL语句,若是,则执行步骤406,若否,则执行步骤408。
步骤406:返回已缓存的目标方言SQL语句。
步骤408:对SQL语句进行词法解析、语法解析。
步骤410:对SQL语句进行语义解析。
步骤412:生成抽象语法树。
步骤414:遍历抽象语法树,按规则转换基本组成单元、函数、元素,形成符合目标方言SQL的抽象语法树。
步骤416:生成目标方言的SQL语句。
步骤418:缓存转换结果。
步骤420:返回目标方言SQL语句。
此外,本申请实施例提供的基于JDBC的数据库适配方法,每个数据库对应的代理实例对初始SQL语句进行语法转换后,可通过数据库连接层将转换后的目标SQL语句发送至相应的数据库;具体的,所述获得每个数据库对应的目标SQL语句之后,还包括:
确定每个数据库对应的数据库连接层;
基于所述数据库连接层,将所述目标SQL语句发送至相应的数据库。
实际应用中,在每种类型的JDBC代理对初始SQL语句进行语法转换后获得目标SQL语句之后,可根据每个数据库对应的数据库连接层,将目标SQL语句发送至对应的数据库连接层,进而转发至相应的数据库中,完成后续的数据库查询等操作。
综上,本申请实施例提供的基于JDBC的数据库适配方法,可基于Java探针模式,自动匹配目标数据库的SQL转换机制;自适应适配应用程序的多数据源机制;基于抽象语法树的方言SQL在线转换及缓存机制;该种方式可对已有的应用程序,零开发即可实现对未适配数据库产品的适配,方便快捷的实现数据库产品的通用性适配,或对新开发应用程序只需采用适配一种数据库架构,实现SQL在线转换、运行,具备更广泛的应用能力及适配场景。
下述结合附图5,图5示出了本说明书一个实施例提供的一种基于JDBC的数据库适配方法中多数据源支持及缓存机制示意图。
图5中JAVA虚拟机中运行应用程序,并利用JAVA探针对应用程序中的SQL语句进行在线转换,以实现对多种类型的数据库进行适配。具体的,图5中的应用程序可连接多个数据库,如目标数据库1(MySQL)......目标数据库n(OceanBase),相应地,通过数据库连接层与数据库持久层相连接,分别对应连接数据库持久层1......数据库持久层n;进而,图5中利用JAVA探针技术可为每种类型数据库生成代理实例,比如代理实例(MySQL)、代理实例(OceanBase),其中,每个代理实例中均包括代理类字节码、SQL转换缓存和SQL语法转换器。
实际应用中,对于多数据源应用程序,JAVA探针在探测到JDBC接口时,根据JDBC类型自动识别目标数据库类型,并对每种目标数据库生成一个实例,每个实例有独立的代理类字节码、SQL转换缓存及SQL语法转换器,从而支持多数据源的应用程序。由于SQL语法转换器需要消耗较多的CPU时间,每个实例建立转换缓存,极大降低了SQL转换的性能损失。
与上述方法实施例相对应,本说明书还提供了基于JDBC的数据库适配装置实施例,图6示出了本说明书一个实施例提供的一种基于JDBC的数据库适配装置的结构示意图。如图6所示,该装置应用于JAVA虚拟机,包括:
程序加载模块602,被配置为加载目标应用程序,其中,所述目标应用程序与至少一种类型的数据库连接;
实例生成模块604,被配置为为每类数据库生成对应的代理实例,其中,每个代理实例中包括JDBC代理和数据库语法转换器;
语句获取模块606,被配置为获取初始SQL语句;
语句转换模块608,被配置为根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,获得每类数据库对应的目标SQL语句。
可选地,所述实例生成模块604,进一步被配置为:
基于JAVA探针,在探测到所述目标应用程序对应的JDBC接口的情况下,确定与所述目标应用程序连接的至少一种数据库类型;
为每种数据库类型对应的数据库,生成对应的代理实例。
可选地,所述实例生成模块604,进一步被配置为:
基于所述JDBC接口,确定所述JDBC的属性信息;
根据所述属性信息,确定与所述目标应用程序连接的至少一种数据库类型。
可选地,所述语句转换模块608,进一步被配置为:
确定目标代理实例中的目标JDBC代理和目标数据库语法转换器;
基于所述目标JDBC代理,采集所述初始SQL语句;
通过所述目标数据库语法转换器,对所述初始SQL语句进行转换。
可选地,所述语句转换模块608,进一步被配置为:
通过所述目标数据库语法转换器,确定所述初始SQL语句对应的目标语法转换规则;
根据所述目标语法转换规则,对所述初始SQL语句进行转换。
可选地,所述语句转换模块608,进一步被配置为:
解析所述初始SQL语句,生成抽象语法树;
遍历所述抽象语法树,根据所述目标语法转换规则对所述抽象语法树中的语法结构进行转换;
其中,所述语法结构包括基本组成单元、函数、元素。
可选地,所述代理实例还包括转换缓存数据库。
可选地,所述装置,还包括:
缓存判断模块,被配置为判断所述转换缓存数据库中,是否存在所述初始SQL语句对应的目标SQL语句,
若是,则返回所述目标SQL语句;
若否,则执行通过所述目标数据库语法转换器,对所述初始SQL语句进行转换的步骤。
可选地,所述装置,还包括:
语句发送模块,被配置为确定每个数据库对应的数据库连接层;
基于所述数据库连接层,将所述目标SQL语句发送至相应的数据库。
本申请实施例提供的基于JDBC的数据库适配装置,通过为与目标应用程序连接的各种类型的数据库,生成对应的代理实例,并利用JDBC代理,通过数据库语法转换器对初始SQL语句进行语法转换,以获得各种类型数据库对应的目标SQL语句;此种方式可无需对已有的目标应用程序进行再次开发,即可适配各种类型的数据库,能够自适应匹配于原不支持类型的数据库,对于使用者来说,是在一种无感知无侵入的状态下,可以使用各种类型的数据库,无需学习各数据库产品存在的SQL语法差异,降低了额外开发的成本及测试成本。
上述为本实施例的一种基于JDBC的数据库适配装置的示意性方案。需要说明的是,该基于JDBC的数据库适配装置的技术方案与上述的基于JDBC的数据库适配方法的技术方案属于同一构思,基于JDBC的数据库适配装置的技术方案未详细描述的细节内容,均可以参见上述基于JDBC的数据库适配方法的技术方案的描述。
图7示出了根据本说明书一个实施例提供的一种计算设备700的结构框图。该计算设备700的部件包括但不限于存储器710和处理器720。处理器720与存储器710通过总线730相连接,数据库750用于保存数据。
计算设备700还包括接入设备740,接入设备740使得计算设备700能够经由一个或多个网络760通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备740可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备700的上述部件以及图7中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图7所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备700可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备700还可以是移动式或静止式的服务器。
其中,处理器720用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述基于JDBC的数据库适配方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的基于JDBC的数据库适配方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述基于JDBC的数据库适配方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述基于JDBC的数据库适配方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的基于JDBC的数据库适配方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述基于JDBC的数据库适配方法的技术方案的描述。
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述基于JDBC的数据库适配方法的步骤。
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的基于JDBC的数据库适配方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述基于JDBC的数据库适配方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (11)
1.一种基于JDBC的数据库适配方法,其特征在于,应用于JAVA虚拟机,包括:
加载目标应用程序,其中,所述目标应用程序与至少一种类型的数据库连接;
为每类数据库生成对应的代理实例,其中,每个代理实例中包括JDBC代理和数据库语法转换器;
获取初始SQL语句;
根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,获得每类数据库对应的目标SQL语句。
2.根据权利要求1所述的方法,其特征在于,所述为每类数据库生成对应的代理实例,包括:
基于JAVA探针,在探测到所述目标应用程序对应的JDBC接口的情况下,确定与所述目标应用程序连接的至少一种数据库类型;
为每种数据库类型对应的数据库,生成对应的代理实例。
3.根据权利要求2所述的方法,其特征在于,所述确定与所述目标应用程序连接的至少一种数据库类型,包括:
基于所述JDBC接口,确定所述JDBC的属性信息;
根据所述属性信息,确定与所述目标应用程序连接的至少一种数据库类型。
4.根据权利要求1所述的方法,其特征在于,所述根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,包括:
确定目标代理实例中的目标JDBC代理和目标数据库语法转换器;
基于所述目标JDBC代理,采集所述初始SQL语句;
通过所述目标数据库语法转换器,对所述初始SQL语句进行转换。
5.根据权利要求4所述的方法,其特征在于,所述通过所述目标数据库语法转换器,对所述初始SQL语句进行转换,包括:
通过所述目标数据库语法转换器,确定所述初始SQL语句对应的目标语法转换规则;
根据所述目标语法转换规则,对所述初始SQL语句进行转换。
6.根据权利要求5所述的方法,其特征在于,所述根据所述目标语法转换规则,对所述初始SQL语句进行转换,包括:
解析所述初始SQL语句,生成抽象语法树;
遍历所述抽象语法树,根据所述目标语法转换规则对所述抽象语法树中的语法结构进行转换;
其中,所述语法结构包括基本组成单元、函数、元素。
7.根据权利要求4所述的方法,其特征在于,所述代理实例还包括转换缓存数据库;
相应地,所述通过所述目标数据库语法转换器,对所述初始SQL语句进行转换之前,还包括:
判断所述转换缓存数据库中,是否存在所述初始SQL语句对应的目标SQL语句,
若是,则返回所述目标SQL语句;
若否,则执行通过所述目标数据库语法转换器,对所述初始SQL语句进行转换的步骤。
8.根据权利要求1-7任意一项所述的方法,其特征在于,所述获得每类数据库对应的目标SQL语句之后,还包括:
确定每个数据库对应的数据库连接层;
基于所述数据库连接层,将所述目标SQL语句发送至相应的数据库。
9.一种基于JDBC的数据库适配装置,应用于JAVA虚拟机,包括:
程序加载模块,被配置为加载目标应用程序,其中,所述目标应用程序与至少一种类型的数据库连接;
实例生成模块,被配置为为每类数据库生成对应的代理实例,其中,每个代理实例中包括JDBC代理和数据库语法转换器;
语句获取模块,被配置为获取初始SQL语句;
语句转换模块,被配置为根据每个代理实例中的所述JDBC代理和所述数据库语法转换器,对所述初始SQL语句进行转换,获得每类数据库对应的目标SQL语句。
10.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至8任意一项所述基于JDBC的数据库适配方法的步骤。
11.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至8任意一项所述基于JDBC的数据库适配方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310063805.XA CN116089542A (zh) | 2023-01-13 | 2023-01-13 | 基于jdbc的数据库适配方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310063805.XA CN116089542A (zh) | 2023-01-13 | 2023-01-13 | 基于jdbc的数据库适配方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116089542A true CN116089542A (zh) | 2023-05-09 |
Family
ID=86202173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310063805.XA Pending CN116089542A (zh) | 2023-01-13 | 2023-01-13 | 基于jdbc的数据库适配方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116089542A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116303371A (zh) * | 2023-05-17 | 2023-06-23 | 北京比格大数据有限公司 | 跨架构数据计算方法及装置、电子设备及存储介质 |
CN116776356A (zh) * | 2023-07-10 | 2023-09-19 | 北京原点数安科技有限公司 | 一种数据库加密方法、装置、电子设备、系统及存储介质 |
-
2023
- 2023-01-13 CN CN202310063805.XA patent/CN116089542A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116303371A (zh) * | 2023-05-17 | 2023-06-23 | 北京比格大数据有限公司 | 跨架构数据计算方法及装置、电子设备及存储介质 |
CN116776356A (zh) * | 2023-07-10 | 2023-09-19 | 北京原点数安科技有限公司 | 一种数据库加密方法、装置、电子设备、系统及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116089542A (zh) | 基于jdbc的数据库适配方法以及装置 | |
US8997070B2 (en) | Extension mechanism for scripting language compiler | |
CN108549538B (zh) | 一种代码检测方法、装置、存储介质及测试终端 | |
US20110196891A1 (en) | Class loading using java data cartridges | |
US10620925B2 (en) | Code generation for queries in a database system | |
US7970757B2 (en) | Computer program product for database query optimization | |
CN111259067A (zh) | 一种基于Spring实现DAO接口的方法、装置及设备 | |
CN111443901A (zh) | 一种基于Java反射的业务扩展方法及装置 | |
US9411618B2 (en) | Metadata-based class loading using a content repository | |
CN117033418A (zh) | 语句重写方法、系统及装置 | |
US7818337B2 (en) | System and method for dynamically exposing SQL statements as web protocols | |
CN112115150A (zh) | 嵌入式内存数据库的数据管理方法、终端设备及介质 | |
CN116204550A (zh) | 数据库查询语句的优化方法、存储介质与设备 | |
CN116010461A (zh) | 数据血缘关系解析方法及装置、存储介质及电子设备 | |
CN111221841A (zh) | 基于大数据的实时处理方法及装置 | |
CN113806331A (zh) | 数据处理方法及装置 | |
CN113742385A (zh) | 数据查询方法及装置 | |
US8856731B2 (en) | Scalable language infrastructure for electronic system level tools | |
CN112988260B (zh) | 应用冷启动优化方法、装置、计算机设备及存储介质 | |
CN116974653B (zh) | 类加载方法及系统 | |
US20230385075A1 (en) | Networked Universal Code Package Provider | |
CN115017172A (zh) | 流数据处理方法、装置、设备及存储介质 | |
CN114169003A (zh) | 基于语法树解析和结果集改写的动态脱敏方法及系统 | |
CN115373722A (zh) | 一种用于在热更新时进行差分更新的方法和装置 | |
CN116303530A (zh) | 异构数据库存储过程访问方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |