System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术公开一种办法及装置,涉及数据库软件开发领域,具体地说是一种异构关系型数据库统一sql处理办法及装置。
技术介绍
1、目前数据库适配主要根据sql生成抽象语法树,根据语法树和数据库方言转化成可以适用于数据库方言的sql语句。此种模式存在以下问题:
2、可以做到语法和语义的转换,但对sql中的表的存在和列的存在不能识别。
3、缺少对大小写敏感的纠错能力,而目前许多数据库是大小写敏感的,因此此种模式转换后的sql语法和语义可能不正确,在实际执行过程可能因为大小写问题导致报错。
技术实现思路
1、本专利技术针对现有技术的问题,提供一种异构关系型数据库统一sql处理办法及装置,解决关系型数据库交互的sql适配问题,通过sql适配解决不同数据库之间的语法和特性差异,实现数据库迁移、跨数据库数据交互、多数据库支持以及数据库升级和版本兼容性等需求。
2、本专利技术提出的具体方案是:
3、本专利技术提供一种异构关系型数据库统一sql处理办法,包括:
4、步骤01:根据应用配置的数据源,建立连接,获取数据库的元数据,根据元数据获取并缓存数据库所有的表信息和表对应的列信息,
5、步骤02:定义拦截器,拦截所有对表结构的增删改的sql操作,并同步更新数据库缓存的表信息和列信息,
6、步骤03:配置sql语法处理模式,所述sql语法处理模式包括自适应模式和严格模式,所述严格模式对列的大小写和值不做任何处理,对于大小
7、步骤04:根据sql解析出sql对应的抽象语法树,
8、步骤05:检测抽象语法树的表名和列名是否在缓存的数据库表信息和列信息内,检测不通过进行步骤06,检测通过进行步骤07,
9、步骤06:抛出异常,给出出错原因,
10、步骤07:保存抽象语法树中与缓存中表信息和列信息的大小写的映射关系,
11、步骤08:进行函数功能转换,完成sql函数部分在不同数据库下的改写,
12、步骤09:进行值转换,根据缓存中列信息的列类型转换抽象语法树中的值,
13、步骤10:进行结果处理,根据保存的抽象语法树中与缓存中表信息和列信息的大小写的映射关系,转换结果中的列名,保证结果信息和sql语句中的列对应。
14、进一步,所述的一种异构关系型数据库统一sql处理办法中步骤01中根据springboot应用配置的数据源,根据数据源建立与数据库的连接,获取数据库的元数据,根据元数据获取表信息,根据表信息轮询获取列信息,缓存数据库所有的表信息和表对应的列信息。
15、进一步,所述的一种异构关系型数据库统一sql处理办法中步骤02中根据springboot应用,使用mybatis,mybatis-plus与数据库交互,使用内置拦截器,拦截所有对表结构的增删改的sql操作。
16、进一步,所述的一种异构关系型数据库统一sql处理办法中步骤02中定义拦截器的class类,通过class类拦截所有对表结构的增删改的sql操作,并触发数据库缓存的表信息和列信息的同步更新。
17、进一步,所述的一种异构关系型数据库统一sql处理办法中步骤04中使用jsqlparse解析sql抽象语法树转换为java对象,步骤05中根据sql抽象语法树对应的java对象,获取对应的表信息和列信息,与缓存中的数据库表信息和列信息进行比对检测。
18、本专利技术提供一种异构关系型数据库统一sql处理装置,包括采集模块、拦截模块、配置模块、解析模块、检测模块和转换处理模块,
19、采集模块根据应用配置的数据源,建立连接,获取数据库的元数据,根据元数据获取并缓存数据库所有的表信息和表对应的列信息,
20、拦截模块定义拦截器,拦截所有对表结构的增删改的sql操作,并同步更新数据库缓存的表信息和列信息,
21、配置模块配置sql语法处理模式,所述sql语法处理模式包括自适应模式和严格模式,所述严格模式对列的大小写和值不做任何处理,对于大小写不匹配的问题和值不匹配的问题提前抛出异常,所述自适应模式兼容匹配列名的大小写,并保证结果的列名和sql语句中的列名一致,并根据缓存中表的列信息,统一转换值,
22、解析模块根据sql解析出sql对应的抽象语法树,
23、检测模块检测抽象语法树的表名和列名是否在缓存的数据库表信息和列信息内,
24、检测不通过则转换处理模块抛出异常,给出出错原因,
25、检测通过则转换处理模块保存抽象语法树中与缓存中表信息和列信息的大小写的映射关系,进行函数功能转换,完成sql函数部分在不同数据库下的改写,进行值转换,根据缓存中列信息的列类型转换抽象语法树中的值,进行结果处理,根据保存的抽象语法树中与缓存中表信息和列信息的大小写的映射关系,转换结果中的列名,保证结果信息和sql语句中的列对应。
26、进一步,所述的一种异构关系型数据库统一sql处理装置中采集模块根据springboot应用配置的数据源,根据数据源建立与数据库的连接,获取数据库的元数据,根据元数据获取表信息,根据表信息轮询获取列信息,缓存数据库所有的表信息和表对应的列信息。
27、进一步,所述的一种异构关系型数据库统一sql处理装置中拦截模块根据springboot应用,使用mybatis,mybatis-plus与数据库交互,使用内置拦截器,拦截所有对表结构的增删改的sql操作。
28、进一步,所述的一种异构关系型数据库统一sql处理装置中拦截模块定义拦截器的class类,通过class类拦截所有对表结构的增删改的sql操作,并触发数据库缓存的表信息和列信息的同步更新。
29、进一步,所述的一种异构关系型数据库统一sql处理装置中解析模块使用jsqlparse解析sql抽象语法树转换为java对象,检测模块根据sql抽象语法树对应的java对象,获取对应的表信息和列信息,与缓存中的数据库表信息和列信息进行比对检测。
30、本专利技术的有益之处是:
31、本专利技术提供一种异构关系型数据库统一sql处理办法,解决关系型数据库交互的sql适配问题,通过sql适配解决不同数据库之间的语法和特性差异,实现数据库迁移、跨数据库数据交互、多数据库支持以及数据库升级和版本兼容性等需求。
本文档来自技高网...【技术保护点】
1.一种异构关系型数据库统一sql处理办法,其特征是包括:
2.根据权利要求1所述的一种异构关系型数据库统一sql处理办法,其特征是步骤01中根据springboot应用配置的数据源,根据数据源建立与数据库的连接,获取数据库的元数据,根据元数据获取表信息,根据表信息轮询获取列信息,缓存数据库所有的表信息和表对应的列信息。
3.根据权利要求1所述的一种异构关系型数据库统一sql处理办法,其特征是步骤02中根据springboot应用,使用mybatis,mybatis-plus与数据库交互,使用内置拦截器,拦截所有对表结构的增删改的sql操作。
4.根据权利要求1所述的一种异构关系型数据库统一sql处理办法,其特征是步骤02中定义拦截器的class类,通过class类拦截所有对表结构的增删改的sql操作,并触发数据库缓存的表信息和列信息的同步更新。
5.根据权利要求1所述的一种异构关系型数据库统一sql处理办法,其特征是步骤04中使用JsqlParse解析sql抽象语法树转换为Java对象,步骤05中根据sql抽象语法树对应的java
6.一种异构关系型数据库统一sql处理装置,其特征是包括采集模块、拦截模块、配置模块、解析模块、检测模块和转换处理模块,
7.根据权利要求6所述的一种异构关系型数据库统一sql处理装置,其特征是采集模块根据springboot应用配置的数据源,根据数据源建立与数据库的连接,获取数据库的元数据,根据元数据获取表信息,根据表信息轮询获取列信息,缓存数据库所有的表信息和表对应的列信息。
8.根据权利要求6所述的一种异构关系型数据库统一sql处理装置,其特征是拦截模块根据springboot应用,使用mybatis,mybatis-plus与数据库交互,使用内置拦截器,拦截所有对表结构的增删改的sql操作。
9.根据权利要求6所述的一种异构关系型数据库统一sql处理装置,其特征是拦截模块定义拦截器的class类,通过class类拦截所有对表结构的增删改的sql操作,并触发数据库缓存的表信息和列信息的同步更新。
10.根据权利要求6所述的一种异构关系型数据库统一sql处理装置,其特征是解析模块使用JsqlParse解析sql抽象语法树转换为Java对象,检测模块根据sql抽象语法树对应的java对象,获取对应的表信息和列信息,与缓存中的数据库表信息和列信息进行比对检测。
...【技术特征摘要】
1.一种异构关系型数据库统一sql处理办法,其特征是包括:
2.根据权利要求1所述的一种异构关系型数据库统一sql处理办法,其特征是步骤01中根据springboot应用配置的数据源,根据数据源建立与数据库的连接,获取数据库的元数据,根据元数据获取表信息,根据表信息轮询获取列信息,缓存数据库所有的表信息和表对应的列信息。
3.根据权利要求1所述的一种异构关系型数据库统一sql处理办法,其特征是步骤02中根据springboot应用,使用mybatis,mybatis-plus与数据库交互,使用内置拦截器,拦截所有对表结构的增删改的sql操作。
4.根据权利要求1所述的一种异构关系型数据库统一sql处理办法,其特征是步骤02中定义拦截器的class类,通过class类拦截所有对表结构的增删改的sql操作,并触发数据库缓存的表信息和列信息的同步更新。
5.根据权利要求1所述的一种异构关系型数据库统一sql处理办法,其特征是步骤04中使用jsqlparse解析sql抽象语法树转换为java对象,步骤05中根据sql抽象语法树对应的java对象,获取对应的表信息和列信息,与缓存中的数据库表信息和列信息进行比对检测。
6.一种异构关系型数...
【专利技术属性】
技术研发人员:杨尚永,魏子重,李锐,
申请(专利权)人:山东浪潮科学研究院有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。