SQL语法转换方法及装置、设备、存储介质与流程

文档序号:37722665发布日期:2024-04-23 11:59阅读:9来源:国知局
SQL语法转换方法及装置、设备、存储介质与流程

本公开涉及计算机领域,尤其涉及sql语法转换方法及装置、设备、存储介质。


背景技术:

1、过去,有很多企业的应用系统在建设初期使用的是第一数据库(例如oracle数据库),如今企业为了降本增效,可考虑将应用系统所使用的第一数据库迁移到一些开源免费的第二数据库(例如postgresql数据库)。

2、应用系统迁移数据库往往需要两部分主要工作,一是将数据库内的数据迁移到新数据库,二是改造应用系统中sql语法在新数据库中的不兼容部分。其中,数据库内的数据迁移只是应用系统切换数据库工作的一部分,这部分工作目前在市场上已经有很多成熟软件可以支撑。然而,针对sql语法在新数据库中不兼容的部分,现有解决方案基本分为两种:一是重新调整应用系统代码中的sql语法,使之兼容新的数据库;二是由数据库厂商进行迭代开发,使数据库兼容更多的sql语法。显然,如果要完成数据库的迁移,企业需要为应用系统改造开发付出成本,或者是等待数据库厂商对数据库sql语法进行迭代更新,而这个更新往往周期很不确定,无法满足企业的时效性需求。


技术实现思路

1、为克服相关技术中存在的问题,本公开提供一种sql语法转换方法及装置、设备、存储介质,本发明通过对应用系统使用的驱动中不兼容的sql语法进行转换,以解决现有技术中企业应用迁移数据库需要重新调整应用系统代码中仍不兼容的sql语法导致成本高或者等待数据库厂商进行迭代开发而导致时效性不高的问题。

2、根据本公开实施例的第一方面,提供一种sql语法转换方法,包括:

3、加载使应用系统与第二数据库通信的目标驱动;所述目标驱动包括预设的代理层;

4、通过所述代理层拦截应用系统发来的第一sql请求;所述第一sql请求遵循第一数据库的语法形式;

5、通过所述代理层将所述第一sql请求改写为第二sql请求;所述第二sql请求遵循第二数据库的语法形式;

6、通过所述目标驱动将所述第二sql请求发送给所述第二数据库执行。

7、在本实施例中,通过在目标驱动中增加代理层,对于原本使用第一数据库的应用系统,在完成第一数据库到第二数据库的数据迁移后,在应用系统和第二数据库通信的过程中,直接通过目标驱动的代理层改写sql请求,以使其满足第二数据库的语法形式,即可使原对应与第一数据库的应用系统无缝对接第二数据库,无需对现有应用系统的代码进行任何修改,能够为企业减轻应用系统迁移数据库后,应用系统的代码改造的成本,也无需等待数据库厂商对数据库sql语法进行迭代更新,以满足企业的时效性需求。

8、在一个实施例中,所述通过所述代理层将所述第一sql请求改写为第二sql请求,包括:

9、通过所述代理层分析所述第一sql请求的语法特征;

10、判断是否能在预先设置的对应关系表中匹配到所述第一sql请求的语法特征;其中,所述对应关系表中记录有第一数据库和第二数据库的不一致的sql语法特征之间的对应关系;

11、若能在预先设置的对应关系表中匹配到所述第一sql请求的语法特征,则根据当前匹配到的所述第一sql请求的语法特征对应的第二数据库的sql语法特征,将所述第一sql请求改写为第二sql请求。

12、在本实施例中,可以预先由数据库专家对第一、第二数据库的不一致的sql语法进行收集、统计、分析,从而确定哪些sql语法特征需要在目标驱动里进行修改,得到需要修改的第一数据库和第二数据库的不一致的sql语法特征之间的对应关系并预先存储在代理层中,则在代理层拦截到第一sql请求时,通过特征匹配即可确定当前第一sql请求的语法特征对应的第二数据库的sql语法特征并将所述第一sql请求改写为第二sql请求。该方法只需要改造目标驱动,实现方式简单,改写速度快,sql语法转换效率高。

13、在一个实施例中,所述通过所述代理层拦截应用系统发来的第一sql请求,包括:

14、所述代理层通过装饰者模式拦截应用系统发来的第一sql请求。

15、在本实施例中,装饰者模式(decorator pattern)是一种设计模式,它允许在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能),这种模式通过创建一个装饰对象来包裹被装饰的对象,从而实现对被装饰对象的功能扩展。代理层通过装饰者模式拦截应用系统发来的第一sql请求,在运行时可以动态地、不限量地对第一sql请求进行改写,以达到转换sql语法的目的,提供了一种比继承更有弹性的替代方案。

16、在一个实施例中,在所述将所述第二sql请求发送给所述第二数据库执行之后,还包括:

17、接收所述第二数据库响应于所述第二sql请求而返回的目标数据;

18、将所述目标数据发送给所述应用系统。

19、在本实施例中,代理层不需要拦截和处理第二数据库返回的数据,因为目标驱动定义的数据结构是标准化的,代理层也遵循目标驱动标准化,对应用系统来说,加了代理层的目标驱动,就是一个普通的目标驱动,对应用系统是无感的,因此,能够保证第二数据库返回数据到应用系统的传输速度。

20、在一个实施例中,所述第一数据库、第二数据库为以下数据库中两种不同类型的数据库:oracle、postgresql、mysql;和/或

21、所述应用系统采用java开发,所述目标驱动为jdbc驱动。

22、在本实施例中,该方法适用于不同类型数据库之间sql语法切换,如oracle到mysql、mysql到postgresql等,此外,以java做为开发语言的应用系统,连接数据库时必须要都会加载jdbc驱动,因此改造jdbc驱动即可。

23、根据本公开实施例的第二方面,提供一种sql语法转换装置,包括:

24、加载模块,用于加载使应用系统与第二数据库通信的目标驱动;所述目标驱动包括预设的代理层;

25、第一接收模块,用于通过所述代理层拦截应用系统发来的第一sql请求;所述第一sql请求遵循第一数据库的语法形式;

26、改写模块,用于通过所述代理层将所述第一sql请求改写为第二sql请求;所述第二sql请求遵循第二数据库的语法形式;

27、第一发送模块,用于通过所述目标驱动将所述第二sql请求发送给所述第二数据库执行。

28、在一个实施例中,所述改写模块,包括:

29、分析单元,用于通过所述代理层分析所述第一sql请求的语法特征;

30、判断单元,用于判断是否能在预先设置的对应关系表中匹配到所述第一sql请求的语法特征;其中,所述对应关系表中记录有第一数据库和第二数据库的不一致的sql语法特征之间的对应关系;

31、改写单元,用于在所述判断单元的判断结果为是时,根据当前匹配到的所述第一sql请求的语法特征对应的第二数据库的sql语法特征,将所述第一sql请求改写为第二sql请求。

32、在一个实施例中,所述装置还包括:

33、第二接收模块,用于接收所述第二数据库响应于所述第二sql请求而返回的目标数据;

34、第二发送模块,用于将所述目标数据发送给所述应用系统。

35、根据本公开实施例的第三方面,提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的sql语法转换方法。

36、根据本公开实施例的第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一实施例所述的sql语法转换方法。

37、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1