CN110008448A - 将SQL代码自动转换为Java代码的方法和装置 - Google Patents

将SQL代码自动转换为Java代码的方法和装置 Download PDF

Info

Publication number
CN110008448A
CN110008448A CN201910260266.2A CN201910260266A CN110008448A CN 110008448 A CN110008448 A CN 110008448A CN 201910260266 A CN201910260266 A CN 201910260266A CN 110008448 A CN110008448 A CN 110008448A
Authority
CN
China
Prior art keywords
code
sql
retrieval
data
hash mapping
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.)
Granted
Application number
CN201910260266.2A
Other languages
English (en)
Other versions
CN110008448B (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.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
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 Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN201910260266.2A priority Critical patent/CN110008448B/zh
Publication of CN110008448A publication Critical patent/CN110008448A/zh
Application granted granted Critical
Publication of CN110008448B publication Critical patent/CN110008448B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • G06F40/157Transformation using dictionaries or tables
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明提供了一种将SQL代码自动转换为Java代码的方法和装置,该方法包括:根据接收的SQL代码,生成检索上下文对象;根据检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。本发明通过将SQL语句解析并转换为统一的检索上下文对象,解决了SQL代码向Java代码转换时效率低、转换后代码可读性差的问题。

Description

将SQL代码自动转换为Java代码的方法和装置
技术领域
本发明涉及数据转换领域,尤其涉及一种将SQL代码自动转换为Java代码的方法和装置。
背景技术
随着系统处理数据量的高速增长,传统以应用服务器和数据库为主的架构遇到了瓶颈。传统数据库无法通过简单的增加节点来实现横向扩展,其可扩展性弱的缺陷逐渐显现,因此传统系统的业务处理功能逐渐由SQL的存储过程处理向扩展性更好的分布式处理转型。但是由于传统框架及技术组件与主流分布式架构所使用的编程语言不同,在转型过程中不可避免需要进行代码重写,即两种的编程语言相互转换。代码转换方面,编程语言的转换是人工方式完成的,在大量SQL逻辑转为Java集合操作过程中,需要耗费大量人力,开发效率低,而且存在复杂度高、可读性差、易出错等多种问题,从而影响系统的稳定性。
因此,现急需找到一种将SQL代码自动转换为Java代码的方法。
发明内容
为了解决SQL代码逻辑转为Java代码的操作过程中,人工转换易出错、代码可读性差、工作量大等问题,提高了系统的稳定性,本发明提供了一种将SQL代码自动转换为Java代码的方法和装置。
第一方面,本发明提供一种将SQL代码自动转换为Java代码的方法,所述方法包括:
根据接收的SQL代码,生成检索上下文对象;
根据所述检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。
进一步地,所述根据所述检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码包括:
根据设置的字段分隔符,对SQL字符串进行键值对转换,得到所述预先设置的哈希映射集合。
进一步地,所述根据接收的SQL代码语句,生成检索上下文对象包括:
根据SQL代码,确定关键要素;
根据所述关键要素,生成检索上下文对象。
进一步地,所述关键要素包括:表名、输出字段、检索条件、排序字段。
进一步地,所述根据所述检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码还包括:
判断所述检索条件是否存储在哈希映射集合中,确定存储在哈希映射集合中,则输出第一数据查询结果;
确定没有存储在哈希映射集合中,则判断所述检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集;
确定不进行单表查询,则对该检索条件进行多表关联查询,输出第二数据结果集;
将所述第一数据结果集和第二数据结果集组合,输出第二数据查询结果。
进一步地,所述确定没有存储在哈希映射集合中,则判断所述检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集包括:
当所述检索条件满足左操作符为索引字段的表达式,且所述表达式之间的逻辑运算均为“与”操作,且所述表达式的运算符为等值时,进行单表查询。
第二方面,本发明提供一种将SQL代码自动转换为Java代码的装置,所述装置包括:
检索上下文对象生成模块,用于根据接收的SQL代码,生成检索上下文对象;
Java代码确定模块,用于根据所述检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。
进一步地,所述Java代码确定模块包括:
字符串转换单元,用于根据设置的字段分隔符,对SQL字符串进行键值对转换,得到所述预先设置的哈希映射集合。
进一步地,所述检索上下文对象生成模块包括:
关键要素确定单元,用于根据SQL代码,确定关键要素;
生成单元,用于根据所述关键要素,生成检索上下文对象。
进一步地,所述关键要素包括:表名、输出字段、检索条件、排序字段。
进一步地,所述Java代码确定模块还包括:
第一数据查询结果确定单元,用于判断所述检索条件是否存储在哈希映射集合中,确定存储在哈希映射集合中,则输出第一数据查询结果;
第一数据结果集确定单元,用于确定没有存储在哈希映射集合中,则判断所述检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集;
第二数据结果集确定单元,用于确定不进行单表查询,则对该检索条件进行多表关联查询,输出第二数据结果集;
第二数据查询结果确定单元,用于将所述第一数据结果集和第二数据结果集组合,输出第二数据查询结果。
第三方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面提供的将SQL代码自动转换为Java代码的方法的步骤。
第四方面,本发明提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现第一方面提供的将SQL代码自动转换为Java代码的方法的步骤。
本发明通过将SQL语句解析并转换为统一的检索上下文对象,解决了SQL代码向Java代码转换时效率低、转换后代码可读性差的问题。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种SQL代码转换为Java代码的架构示意图;
图2为本发明实施例提供的一种将SQL代码自动转换为Java代码的方法的流程示意图;
图3为本发明另一实施例提供的将SQL代码自动转换为支持分布式内存的Java代码的方法流程图;
图4为本发明实施例提供的Java集合对象转换的细化流程图;
图5为本发明实施例提供的检索上下文对象构建的细化流程图;
图6为本发明实施例提供的检索优化机制流程图;
图7为本发明实施例提供的将SQL代码自动转换为Java代码的装置的框图;
图8为本发明实施例提供的电子设备框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
随着系统处理数据量的高速增长,传统数据库无法通过简单的增加节点来实现横向扩展,其可扩展性弱的缺陷逐渐显现,因此传统系统的业务处理功能逐渐由SQL存储过程处理向扩展性更好的分布式处理转型。如图1所示,图1为一种SQL代码转换为Java代码的架构示意图,原先存储在传统关系型数据库,如:Oracle数据库,其存储过程分别迁移到图1中的分布式系统服务器的任务调度模块和计算模块,同时这些程序对应操作的数据,也分别迁移至分布式数据库和内存数据库中进行存储,从而计算逻辑的实现也从SQL存储过程转换为Java语言的处理,因此存在大量的SQL逻辑代码转成Java代码的场景,因此造成如下问题:
由于编程语言的转换是人工方式完成的,在大量SQL逻辑代码转Java代码操作过程中,需要耗费大量人力,开发效率低,而且存在复杂度高、可读性差、易出错等多种问题,从而影响系统的稳定性。
为了解决上述问题,本发明实施例提供一种将SQL代码自动转换为Java代码的方法,如图2所示,图2为本发明实施例提供的一种将SQL代码自动转换为Java代码的方法的流程示意图,该方法包括:
步骤201,根据接收的SQL代码,生成检索上下文对象。
具体为,为提高数据本地读取效率,将收集到的SQL语句以字符串形式存储在分布式数据库中。此时,根据字符串的构造规则对该字符串进行键值对操作,并将操作后的结果存储起来,生成哈希映射集合。
接收数据端发来的需要进行语言转换的SQL代码,根据该SQL代码生成检索上下文对象。
步骤202,根据检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。
具体为,在预先设置的哈希映射集合中存储有每个SQL代码对应的Java代码映射关系,在本发明实施例中根据SQL代码生成的检索上下文对象,查找预先设置的哈希映射集合里关于该检索上下文对象对应的Java代码。
本发明实施例将SQL语句解析并转换为统一的检索上下文对象,解决了SQL代码向Java代码转换时效率低、转换后代码可读性差的问题。
基于上述实施例的内容,作为一种可选实施例:根据检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码包括:
根据设置的字段分隔符,对SQL字符串进行键值对转换,得到预先设置的哈希映射集合。
具体为,以字段特定分隔符分隔的键值对对SQL字符串进行键值对转换,不同键值对之间用逗号分隔;通过对SQL字符串进行变形处理,转换成Java的哈希映射对象生成哈希映射集合,后续通过哈希映射的get方法,根据键名,实现对键值的访问。
本发明实施例通过对SQL字符串进行键值对转换,提高数据转换稳定性。
基于上述实施例的内容,作为一种可选实施例:根据接收的SQL代码语句,生成检索上下文对象包括:
根据SQL代码,确定关键要素;
根据关键要素,生成检索上下文对象。
具体为,读取和解析SQL代码,之后提取解析后的SQL代码中的关键要素。将该关键要素进行整理,记录到上下文对象,最终形成检索上下文对象。
本发明实施例通过SQL代码的关键要素,生成检索上下文对象,根据检索上下文对象统一数据检索的行为,加快检索的速度和准确性。
基于上述实施例的内容,作为一种可选实施例:关键要素包括:表名、输出字段、检索条件、排序字段。
具体为,在本发明实施例中,表名、输出字段、检索条件、排序字段都是用于快速定位查找内容,缩小遍历查找的范围。
基于上述实施例的内容,作为一种可选实施例:根据检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码还包括:
判断检索条件是否存储在哈希映射集合中,确定存储在哈希映射集合中,则输出第一数据查询结果;
确定没有存储在哈希映射集合中,则判断检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集;
确定不进行单表查询,则对该检索条件进行多表关联查询,输出第二数据结果集;
将第一数据结果集和第二数据结果集组合,输出第二数据查询结果。
具体为,检索条件是SQL代码关键要素里最重要的查找方式,检索条件由表达式和逻辑运算符构成,表达式由左操作符、运算符、右操作符构成。例如:检索条件为:张三=3岁=1米高。
判断检索条件是否已经存储在预先设置的哈希映射集合里,如果存在,则直接输出对应的映射结果。如果该检索条件没有存储在哈希映射集合中,则根据检索条件中的检索信息查看是否需要进行单表查询,如果确定进行单表查询,则根据单表查询,从数据集中检索出符合条件的第一数据结果集;
如果该检索条件不需要单表查询,则直接进入多表关联查询,其中多表关联查询包括:哈希关联查询或笛卡尔积关联查询,当检索的关联条件中的表达式均为等值操作,且表达式之间的逻辑表达式均为“与”操作,那么使用哈希关联优化检索,哈希关联的检索效率为笛卡尔积关联的n倍,n为查询记录数量;否则使用笛卡尔积关联查询。之后将查询结果输出,作为第二数据结果集。
将第一数据结果集和第二数据结果集的检索结果重新组装后返回和缓存在哈希映射集合中,为下次检索提供更多的信息。需要说明的是,本发明实施例关于检索条件存储的具体位置不作限定,检索条件可以是存储在哈希映射集合中或分布式内存数据库里或任意缓存内。
本发明实施例通过查询哈希映射集合中的存储结果,直接输出查询结果,或者根据检索条件使用索引优化的单表或多表关联检索,对检索过程进行优化运行后,输出检索结果。这样能够最大程度复用查询结果,减少重复运算,减轻CPU运算压力,降低计算的复杂度,提高运算速度。
基于上述实施例的内容,作为一种可选实施例:确定没有存储在哈希映射集合中,则判断检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集包括:
当检索条件满足左操作符为索引字段的表达式,且表达式之间的逻辑运算均为“与”操作,且表达式的运算符为等值时,进行单表查询。
具体为,本发明实施是说明检索条件满足哪些条件后可以进行单表检索:当检索条件的左操作符为索引字段的表达式且表达式之间的逻辑运算均为“与”操作,且表达式的运算符为等值,同时满足该三项条件时,进行单表查询。其中,常规的表达式由左操作符、运算符、右操作符构成,例如:“a≥10”中,“a”为左符号符,“≥”为运算符,“10”为右运算符,需要说明的是,左、右运算符也可以是一个表达式。
本发明实施例通过设置单表查询条件,可以根据实际情况选择单表查询,减轻CPU运算压力,降低计算的复杂度,提高运算速度。
基于上述实施例的内容,作为一种可选实施例:本发明实施例通过复用原查询类SQL代码,将其作为Java接口的输入,运行过程中动态转换为集合的处理,优化运行机制,实现对内存数据库中的数据的高效检索。如图3所示,图3为本发明另一实施例提供的将SQL代码自动转换为支持分布式内存的Java代码的方法流程图:
步骤301,Java集合对象转换处理。考虑到数据从分布式节点的本地上读取效率高,因此将收集的原始SQL数据以字符串的形式存储在分布式数据库中,为了支持Java的对象操作,分布式系统首先从分布式数据库读取原始字符串数据,字符串的构造规则以特定字段分隔符做键值对操作,在不同键值对之间用逗号分隔;通过对原始字符串进行变形处理,转换成Java的哈希映射对象,后续通过哈希映射的get方法,根据键名,实现对键值的访问。
步骤302:检索上下文对象构建。为了统一数据检索的行为,存储检索过程中的中间数据,本发明实施例封装了一个检索上下文的Java对象。接收标准SQL语句作为输入,识别SQL语句中的各个要素,包括表名、查询条件、排序字段、输出字段等,登记在检索上下文对象中,并且读取数据表的配置信息,据此建立临时索引数据,将索引数据存放在检索上下文中,最后输出检索上下文对象。
如下步骤303和步骤304是在实际运行过程中对检索效率进行优化。
步骤303:检索过程优化运行。为了提高检索效率,在运行阶段对运行机制进行了优化。优化运行的机制主要有缓存运行结果、使用索引优化单表检索、使用哈希关联优化多表关联检索,优化运行后输出检索结果。使用结果缓存,能够最大程度复用查询结果,减少重复运算,减轻CPU运算压力;使用索引和哈希关联,能够降低计算的复杂度,提高运算速度。
步骤304:检索结果输出。根据步骤303检索的结果,构建结果缓存,并根据检索上下文中的输出字段返回结果数据。
如图4为本发明实施例提供的Java集合对象转换的细化流程图,图4是本发明实施例针对图3的步骤301的详细流程图,其中包括原始数据集读取、遍历数据集将文本转成Map对象、组装输出结果步骤,具体如下:
步骤3010:读取内存数据库的表数据,本发明以内存数据库为例进行说明。
步骤3011:遍历每条数据,将文本转成Map对象
具体地,在内存数据库的存储模型为三层哈希结构,分别是KEY、FIELD、VALUE。具体数据存储模型说明如表1所示:
表1
分布式系统在批量计算任务开始后,其中的集群控制节点(比如Spark集群的驱动器,是执行开发程序中main方法的进程,负责创建运行环境,生成作业DAG,协调资源,生成并发送作业和数据到各个执行器)从内存数据库中根据数据表名获取原始数据集,即上述3层结构中VALUE的集合,循环对每个VALUE进行数据变形,从文本转换为哈希映射对象,返回哈希映射集合。
步骤3012:构造输出结果。根据步骤3011输出的哈希映射集合,构造<表名,哈希映射集合>的键值结构并输出。
步骤3013:将步骤3012输出的结果分发至分布式系统中的各计算节点,由节点进行相应逻辑运算。
图5为本发明实施例提供的检索上下文对象构建的细化流程图,图4是本发明实施例针对图3的步骤302的详细流程图,其中包括语句解析、要素识别与登记、建立优化机制、获取索引配置等步骤,具体介绍如下:
步骤3020:读取SQL代码。具体地,分布式系统中各计算节点接收到计算任务之后,通过本发明提供的统一封装友好、高效的数据访问接口(上下文对象提供的runSql方法)获取SQL代码。
步骤3021:解析SQL代码语句,识别出关键要素:表名、输出字段、条件、排序字段,若为多表关联查询,需进一步识别出关联方式、关联条件,识别完成后,构建检索上下文对象,记录关键要素信息。
步骤3022:关键要素识别登记后,建立优化执行机制。根据查询条件,读取所查询表的索引字段配置,判断是否需要建立索引,若为多表关联查询时,根据表的数据量大小,决定主表与辅表,数据量大的为辅表,后续优化机制中为辅表建立哈希表,根据关联查询条件,判断是否能够使用哈希关联查询,将优化机制记录到检索上下文对象。
步骤3023:检索上下文对象建立之后,根据上一步骤中登记的索引配置,构建临时哈希索引对象。具体地,对于一张表而言,其索引的数据结构为KEY-VALUE,其中KEY为索引字段名称,VALUE为一个哈希映射<String,List<Integer>>,哈希结构的键为索引字段的值,哈希结构的值为索引值所在集合的下标位置序列。
步骤3024:输出检索上下文对象,包含表名、查询条件、排序字段、索引数据、输出字段要素。
图6为本发明实施例提供的检索优化机制流程图,图6是本发明实施例针对图3的步骤303的详细流程图,具体流程如下:
步骤3030:接收检索条件。检索条件由表达式和逻辑运算符构成,表达式由左操作符、运算符、右操作符构成。针对单表操作的表达式,左操作符一般为表的字段名,右操作符为目标值;针对多表关联的表达式,左右操作符一般为两个表的字段名;运算符包括等于、不等于、大于、小于、包含等等。
步骤3031:判断对于相同检索条件是否存在结果缓存。如是跳转步骤30310,如否进入步骤3032。
步骤3032:判断是否单表查询,如是进入步骤3033,如否进入步骤3036。
步骤3033~步骤3035执行单表检索,单表检索通过索引来优化执行;步骤3036~步骤3038执行多表检索,多表关联查询在索引的基础上,还能通过哈希关联的机制优化执行。
步骤3033:单表过滤根据规则获取能够通过索引优化执行的检索条件。规则为:表达式之间的逻辑运算均为“与”操作,存在左操作符为索引字段的表达式,并且表达式的运算符为等值类型操作。
步骤3034:通过索引过滤步骤3013分发到各节点的数据集,即利用条件表达式中的目标值从步骤3023创建的哈希索引对象中获取目标记录在数据集中的下标位置集,通过下标位置进一步从数据集中检索出符合条件的结果集1。
步骤3035:根据非索引条件过滤数据集,即在步骤3034输出的结果集1中根据非索引条件过滤得到最终的结果集。
步骤3036:根据关联条件判定关联方式为哈希关联或者笛卡尔积关联。具体地,若关联条件中的表达式均为等值操作,且表达式之间的逻辑表达式均为“与”操作,那么使用哈希关联优化检索,哈希关联的检索效率为笛卡尔积的n倍,n为辅表的记录数;否则使用笛卡尔积关联。
步骤3037:若单表检索条件之间是“与”连接,则根据单表条件预先进行单表过滤,过滤方法同步骤3034~步骤3035相同此处不做赘述;否则进入步骤3038。
步骤3038:若为哈希关联,根据哈希关联字段为辅表建立哈希表,哈希表为哈希映射结构,Map的键为使用特定分隔符拼接的关联字段值,Map的值为对应记录所在数据集的下标位置序列,主表通过哈希关联字段值循环遍历哈希表,得到数据集的下标位置序列,根据下标从数据集中得到结果集1。
结果集1的的记录格式示例为{<主表名,主表内容>,<辅表名,辅表内容>},主表内容、辅表内容均为哈希映射对象。
根据非哈希关联条件过滤结果集1,得到结果集2。
若为笛卡尔积关联,则对主表和辅表进行笛卡尔积操作,逐个遍历根据关联条件过滤得到结果集2。结果集2的记录格式同结果集1。
步骤3039:根据检索上下文对象中的输出字段信息,对步骤3035或步骤3038的检索结果重新组装后返回结果集,比如输出字段是A、B,最终组装成的结果集格式为{‘A’:‘valueA’,‘B’:‘valueB’}的集合,同时将检索条件与数据结果集存入结果缓存中。
步骤30310:返回数据查询结果。
根据本发明的另一个方面,本发明实施例提供一种将SQL代码自动转换为Java代码的装置,参见图7,图7为本发明实施例提供将SQL代码自动转换为Java代码的装置的框图。该装置用于在前述各实施例中进行将SQL代码自动转换为Java代码。因此,在前述各实施例中的将SQL代码自动转换为Java代码方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。
如图所示,该装置包括:
检索上下文对象生成模块701,用于根据接收的SQL代码,生成检索上下文对象;
Java代码确定模块702,用于根据检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。
本发明实施例将SQL语句解析并转换为统一的检索上下文对象,解决了SQL代码向Java代码转换时效率低、转换后代码可读性差的问题。
基于上述实施例的内容,作为一种可选实施例:Java代码确定模块包括:
字符串转换单元,用于根据设置的字段分隔符,对SQL字符串进行键值对转换,得到预先设置的哈希映射集合。
本发明实施例通过对SQL字符串进行键值对转换,提高数据转换稳定性。
基于上述实施例的内容,作为一种可选实施例:检索上下文对象生成模块包括:
关键要素确定单元,用于根据SQL代码,确定关键要素;
生成单元,用于根据关键要素,生成检索上下文对象。
本发明实施例通过SQL代码的关键要素,生成检索上下文对象,根据检索上下文对象统一数据检索的行为,加快检索的速度和准确性。
基于上述实施例的内容,作为一种可选实施例:关键要素包括:表名、输出字段、检索条件、排序字段。
基于上述实施例的内容,作为一种可选实施例:Java代码确定模块还包括:
第一数据查询结果确定单元,用于判断检索条件是否存储在哈希映射集合中,确定存储在哈希映射集合中,则输出第一数据查询结果;
第一数据结果集确定单元,用于确定没有存储在哈希映射集合中,则判断检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集;
第二数据结果集确定单元,用于确定不进行单表查询,则对该检索条件进行多表关联查询,输出第二数据结果集;
第二数据查询结果确定单元,用于将第一数据结果集和第二数据结果集组合,输出第二数据查询结果。
本发明实施例通过查询哈希映射集合中的存储结果,直接输出查询结果,或者根据检索条件使用索引优化的单表或多表关联检索,对检索过程进行优化运行后,输出检索结果。这样能够最大程度复用查询结果,减少重复运算,减轻CPU运算压力,降低计算的复杂度,提高运算速度。
图8为本发明实施例提供的电子设备框图,如图8所示,该设备包括:处理器801、存储器802和总线803;
其中,处理器801及存储802分别通过总线803完成相互间的通信;处理器801用于调用存储器802中的程序指令,以执行上述实施例所提供的将SQL代码自动转换为Java代码的方法,例如包括:接根据接收的SQL代码,生成检索上下文对象;根据检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。
本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现将SQL代码自动转换为Java代码的方法的步骤。例如包括:接根据接收的SQL代码,生成检索上下文对象;根据检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后,本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (13)

1.一种将SQL代码自动转换为Java代码的方法,其特征在于,所述方法包括:
根据接收的SQL代码,生成检索上下文对象;
根据所述检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。
2.根据权利要求1所述的方法,其特征在于,所述根据所述检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码包括:
根据设置的字段分隔符,对SQL字符串进行键值对转换,得到所述预先设置的哈希映射集合。
3.根据权利要求1所述的方法,其特征在于,所述根据接收的SQL代码语句,生成检索上下文对象包括:
根据SQL代码,确定关键要素;
根据所述关键要素,生成检索上下文对象。
4.根据权利要求3所述的方法,其特征在于,所述关键要素包括:表名、输出字段、检索条件、排序字段。
5.根据权利要求4所述的方法,其特征在于,所述根据所述检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码还包括:
判断所述检索条件是否存储在哈希映射集合中,确定存储在哈希映射集合中,则输出第一数据查询结果;
确定没有存储在哈希映射集合中,则判断所述检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集;
确定不进行单表查询,则对该检索条件进行多表关联查询,输出第二数据结果集;
将所述第一数据结果集和第二数据结果集组合,输出第二数据查询结果。
6.根据权利要求5所述的方法,其特征在于,所述确定没有存储在哈希映射集合中,则判断所述检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集包括:
当所述检索条件满足左操作符为索引字段的表达式,且所述表达式之间的逻辑运算均为“与”操作,且所述表达式的运算符为等值时,进行单表查询。
7.一种将SQL代码自动转换为Java代码的装置,其特征在于,所述装置包括:
检索上下文对象生成模块,用于根据接收的SQL代码,生成检索上下文对象;
Java代码确定模块,用于根据所述检索上下文对象查找预先设置的哈希映射集合,得到对应的Java代码。
8.根据权利要求7所述的装置,其特征在于,所述Java代码确定模块包括:
字符串转换单元,用于根据设置的字段分隔符,对SQL字符串进行键值对转换,得到所述预先设置的哈希映射集合。
9.根据权利要求7所述的装置,其特征在于,所述检索上下文对象生成模块包括:
关键要素确定单元,用于根据SQL代码,确定关键要素;
生成单元,用于根据所述关键要素,生成检索上下文对象。
10.根据权利要求9所述的装置,其特征在于,所述关键要素包括:表名、输出字段、检索条件、排序字段。
11.根据权利要求10所述的装置,其特征在于,所述Java代码确定模块还包括:
第一数据查询结果确定单元,用于判断所述检索条件是否存储在哈希映射集合中,确定存储在哈希映射集合中,则输出第一数据查询结果;
第一数据结果集确定单元,用于确定没有存储在哈希映射集合中,则判断所述检索条件是否进行单表查询,确定进行单表查询,则根据单表查询,输出第一数据结果集;
第二数据结果集确定单元,用于确定不进行单表查询,则对该检索条件进行多表关联查询,输出第二数据结果集;
第二数据查询结果确定单元,用于将所述第一数据结果集和第二数据结果集组合,输出第二数据查询结果。
12.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述将SQL代码自动转换为Java代码的方法的步骤。
13.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至6任一项所述将SQL代码自动转换为Java代码的方法的步骤。
CN201910260266.2A 2019-04-02 2019-04-02 将SQL代码自动转换为Java代码的方法和装置 Active CN110008448B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910260266.2A CN110008448B (zh) 2019-04-02 2019-04-02 将SQL代码自动转换为Java代码的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910260266.2A CN110008448B (zh) 2019-04-02 2019-04-02 将SQL代码自动转换为Java代码的方法和装置

Publications (2)

Publication Number Publication Date
CN110008448A true CN110008448A (zh) 2019-07-12
CN110008448B CN110008448B (zh) 2023-10-17

Family

ID=67169671

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910260266.2A Active CN110008448B (zh) 2019-04-02 2019-04-02 将SQL代码自动转换为Java代码的方法和装置

Country Status (1)

Country Link
CN (1) CN110008448B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110851142A (zh) * 2019-10-18 2020-02-28 浙江大学 一种将Transact-SQL程序转换为Java程序的方法
CN112363727A (zh) * 2020-11-10 2021-02-12 中国平安人寿保险股份有限公司 Sql代码的java转换方法、装置、计算机设备及存储介质

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070244865A1 (en) * 2006-04-17 2007-10-18 International Business Machines Corporation Method and system for data retrieval using a product information search engine
CN101087203A (zh) * 2006-06-11 2007-12-12 上海全成通信技术有限公司 一种海量数据统计方法
CN102073490A (zh) * 2009-11-25 2011-05-25 阿里巴巴集团控股有限公司 转译数据库语言的方法及装置
US20110158310A1 (en) * 2009-12-30 2011-06-30 Nvidia Corporation Decoding data using lookup tables
CN102323947A (zh) * 2011-09-05 2012-01-18 东北大学 环形架构数据库上预连接表的生成方法
CN103699696A (zh) * 2014-01-13 2014-04-02 中国人民大学 一种云计算环境下的数据在线聚集方法
US20140280259A1 (en) * 2013-03-15 2014-09-18 Oracle International Corporation Run-time sql language translation
WO2016171271A1 (ja) * 2015-04-22 2016-10-27 株式会社日立製作所 秘匿化データベースシステム及び秘匿化データ管理方法
CN106294701A (zh) * 2016-08-08 2017-01-04 武汉斗鱼网络科技有限公司 网站前端的数据缓存系统及方法
CN107103007A (zh) * 2016-02-23 2017-08-29 阿里巴巴集团控股有限公司 一种sql代码转换方法及装置
CN107391554A (zh) * 2017-06-07 2017-11-24 中国人民解放军国防科学技术大学 高效分布式局部敏感哈希方法
WO2018036549A1 (zh) * 2016-08-25 2018-03-01 中兴通讯股份有限公司 分布式数据库查询方法、装置及管理系统

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070244865A1 (en) * 2006-04-17 2007-10-18 International Business Machines Corporation Method and system for data retrieval using a product information search engine
CN101087203A (zh) * 2006-06-11 2007-12-12 上海全成通信技术有限公司 一种海量数据统计方法
CN102073490A (zh) * 2009-11-25 2011-05-25 阿里巴巴集团控股有限公司 转译数据库语言的方法及装置
US20110158310A1 (en) * 2009-12-30 2011-06-30 Nvidia Corporation Decoding data using lookup tables
CN102323947A (zh) * 2011-09-05 2012-01-18 东北大学 环形架构数据库上预连接表的生成方法
US20140280259A1 (en) * 2013-03-15 2014-09-18 Oracle International Corporation Run-time sql language translation
CN103699696A (zh) * 2014-01-13 2014-04-02 中国人民大学 一种云计算环境下的数据在线聚集方法
WO2016171271A1 (ja) * 2015-04-22 2016-10-27 株式会社日立製作所 秘匿化データベースシステム及び秘匿化データ管理方法
CN107103007A (zh) * 2016-02-23 2017-08-29 阿里巴巴集团控股有限公司 一种sql代码转换方法及装置
CN106294701A (zh) * 2016-08-08 2017-01-04 武汉斗鱼网络科技有限公司 网站前端的数据缓存系统及方法
WO2018036549A1 (zh) * 2016-08-25 2018-03-01 中兴通讯股份有限公司 分布式数据库查询方法、装置及管理系统
CN107391554A (zh) * 2017-06-07 2017-11-24 中国人民解放军国防科学技术大学 高效分布式局部敏感哈希方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
饶文;陈旭;: "基于布隆过滤器的海量数据查询技术的优化与应用", no. 02 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110851142A (zh) * 2019-10-18 2020-02-28 浙江大学 一种将Transact-SQL程序转换为Java程序的方法
CN112363727A (zh) * 2020-11-10 2021-02-12 中国平安人寿保险股份有限公司 Sql代码的java转换方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN110008448B (zh) 2023-10-17

Similar Documents

Publication Publication Date Title
CN107122443B (zh) 一种基于Spark SQL的分布式全文检索系统及方法
CN104899314B (zh) 一种数据仓库的血统分析方法和装置
US11294869B1 (en) Expressing complexity of migration to a database candidate
CN103970902A (zh) 一种大量数据情况下的可靠即时检索方法及系统
US8037057B2 (en) Multi-column statistics usage within index selection tools
CN106462575A (zh) 群集内存数据库的设计及实现
CN106709012A (zh) 一种大数据分析方法及装置
CN107301205A (zh) 一种大数据分布式实时查询方法及系统
CN108536692A (zh) 一种执行计划的生成方法、装置及数据库服务器
US11461333B2 (en) Vertical union of feature-based datasets
CN108009270A (zh) 一种基于分布式内存计算的文本检索方法
CN111708774B (zh) 一种基于大数据的产业分析系统
CN110866029B (zh) sql语句构建方法、装置、服务器及可读存储介质
CN103631922A (zh) 基于Hadoop集群的大规模Web信息提取方法及系统
CN109213752A (zh) 一种基于cim的数据清洗转换方法
CN109033314A (zh) 内存受限情况下的大规模知识图谱的实时查询方法和系统
CN108108466A (zh) 一种分布式系统日志查询分析方法及装置
CN113918793A (zh) 一种多源科创资源数据采集方法
US20100281053A1 (en) Method, apparatus, and computer-readable medium for distributing a query
CN110008448A (zh) 将SQL代码自动转换为Java代码的方法和装置
US20210303575A1 (en) Offloading statistics collection
CN107818181A (zh) 基于Plcient交互式引擎的索引方法及其系统
CN109145009A (zh) 一种基于SQL检索ElasticSearch的方法
CN110825641B (zh) 一种基于模拟数据生成器的微服务应用测试系统
CN109308290A (zh) 一种基于cim的高效数据清洗转换方法

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
GR01 Patent grant
GR01 Patent grant