CN116149666A - Sql语句的语法检查方法、系统、电子设备及可读存储介质 - Google Patents
Sql语句的语法检查方法、系统、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN116149666A CN116149666A CN202310159470.1A CN202310159470A CN116149666A CN 116149666 A CN116149666 A CN 116149666A CN 202310159470 A CN202310159470 A CN 202310159470A CN 116149666 A CN116149666 A CN 116149666A
- Authority
- CN
- China
- Prior art keywords
- statement
- checked
- execution
- data source
- sentence
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- 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/2455—Query execution
-
- 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/248—Presentation of query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库语言领域,公开了一种SQL语句的语法检查方法、系统、电子设备及可读存储介质,该方法通过待检查语句的数据源查询得到数据源名称,根据查询得到的数据源名称从语句配置信息中匹配语句调用对象,再基于语句调用对象和预设的语句执行参数执行待检查语句,并根据执行结果确定待检查语句的语法检查结果,相较于静态SQL检查或在线SQL检查,借助数据源和语句配置信息得到待检查语句,同时,借助JAVA反射机制调用语句调用对象,以执行待检查语句,进而根据执行结果确定语法检查结果,实现了在日常生产环境中动态检查SQL语句的语法,从而提高了SQL语句的语法检测效率。
Description
技术领域
本发明涉及数据库语言技术领域,尤其涉及一种SQL语句的语法检查方法、系统、电子设备及可读存储介质。
背景技术
在系统迭代的过程中,需要新增或修改SQL(Structured Query Language,结构化查询语言)语言,若涉及公共SQL语句改动或大批量SQL语句改动时,未对SQL语句进行语法检测而将存在语法问题的SQL语句发布到生产环境,导致语句无法执行或出错,影响业务。
而现有的SQL语句语法检测通常是通过开发自测或系统测试,大部分是基于语法规则的离线静态SQL检查或通过关联数据库实现在线SQL检查,其中,静态SQL检查依赖于规则库的完备情况,在线SQL检查则适用于单数据源的项目而非多数据源,满足条件苛刻,导致SQL语句的语法检测效率较低。
发明内容
为了对披露的实施例的一些方面有基本的理解,下面给出了简单的概括。所述概括不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围,而是作为后面的详细说明的序言。
鉴于以上所述现有技术的缺点,本发明公开了一种SQL语句的语法检查方法、系统、电子设备及可读存储介质,以提高SQL语句的语法检测效率。
本发明提供了一种SQL语句的语法检查方法,包括:获取待检查语句的数据源和语句配置信息;对所述数据源进行查询,得到所述待检查语句对应的数据源名称,并根据所述数据源名称从所述语句配置信息中匹配出所述待检查语句对应的语句调用对象;根据预设的语句执行参数反射调用所述语句调用对象,以执行所述待检查语句,并根据执行结果确定所述待检查语句的语法检查结果。
本发明提供了一种SQL语句的语法检查系统,包括:获取模块,用于获取待检查语句的数据源和语句配置信息;查询模块,用于对所述数据源进行查询,得到所述待检查语句对应的数据源名称;匹配模块,用于根据所述数据源名称从所述语句配置信息中匹配出所述待检查语句对应的语句调用对象;检查模块,用于根据预设的语句执行参数反射调用所述语句调用对象,以执行所述待检查语句,并根据执行结果确定所述待检查语句的语法检查结果。
本发明提供了一种电子设备,包括:处理器及存储器;所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述电子设备执行上述的方法。
本发明提供了一种计算机可读存储介质,其上存储有计算机程序:所述计算机程序被处理器执行时实现上述的方法。
本发明的有益效果:
通过待检查语句的数据源查询得到数据源名称,根据查询得到的数据源名称从语句配置信息中匹配语句调用对象,再基于语句调用对象和预设的语句执行参数执行待检查语句,并根据执行结果确定待检查语句的语法检查结果。这样,相较于静态SQL检查或在线SQL检查,借助数据源和语句配置信息得到待检查语句,同时,借助JAVA反射机制调用语句调用对象,以执行待检查语句,进而根据执行结果确定语法检查结果,实现了在日常生产环境中动态检查SQL语句的语法,从而提高了SQL语句的语法检测效率。
附图说明
图1是本发明实施例中一个Spring技术架构的结构示意图;
图2是本发明实施例中一个Mybatis技术架构的结构示意图;
图3是本发明实施例中一个SQL语句的语法检查方法的流程示意图;
图4是本发明实施例中另一个SQL语句的语法检查方法的流程示意图;
图5是本发明实施例中一个SQL语句的语法检查系统的结构示意图;
图6是本发明实施例中一个电子设备的示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的子样本可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
在下文描述中,探讨了大量细节,以提供对本发明实施例的更透彻的解释,然而,对本领域技术人员来说,可以在没有这些具体细节的情况下实施本发明的实施例是显而易见的,在其他实施例中,以方框图的形式而不是以细节的形式来示出公知的结构和设备,以避免使本发明的实施例难以理解。
本公开实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开实施例的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
除非另有说明,术语“多个”表示两个或两个以上。
本公开实施例中,字符“/”表示前后对象是一种“或”的关系。例如,A/B表示:A或B。
术语“和/或”是一种描述对象的关联关系,表示可以存在三种关系。例如,A和/或B,表示:A或B,或,A和B这三种关系。
首先需要说明的是,在本公开实施例中,SQL语句的执行是通过Spring和Mybatis实现的。
结合图1所示,本公开实施例提供了一种Spring技术架构。
Spring是一个开源框架,包含核心模块、数据持久化、Web应用插件、轻量级IoC、AOP容器等组件模块。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本JavaBean来完成以前只可能由EJB完成的事情。Spring的核心是控制反转(IoC)和面向切(AOP)。
Spring具有如下优点:低侵入式设计,代码污染极低。独立于各种应用服务器,基于Spring框架的应用,可以真正实现WriteOnce,RunAnywhere的承诺。Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦。Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用。Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。
结合图2所示,本公开实施例提供了一种Mybatis技术架构。
MyBatis作为基于Java的持久层框架,支持定制化SQL、存储过程和一些高级的映射。一般通过配置xml文件或使用Mybatis提供的注解来配置和映射对应的SQL信息,然后通过解析这些配置信息来执行相应的SQL语句;MyBatis是一项解决数据库持久层的开源技术。它支持定制化SQL、存储过程以及高级映射,封装并简化JDBC代码创建数据库连接通道,设置数据库操作SQL语句参数,获取结果集等一系列操作。MyBatis通过使用简单的XML或注解来配置和映射原生信息,将Java代码设计接口和POJOs(Plain Ordinary Java Object,普通的Java对象)映射成数据库表结构和数据实体对象,并通过数据实体对象传递SQL参数完成软件程序数据库交互操作。
通常把Mybatis的功能架构分为三层:API接口层用于提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理;数据处理层用于负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等,它主要的目的是根据调用的请求完成一次数据库操作;基础支撑层用于负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件,为上层的数据处理层提供最基础的支撑。
Mybatis有如下优点:相较于JDBC,减少了50%以上的代码量。MyBatis是最简单的持久化框架,小巧并且简单易学。MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。提供XML标签,支持编写动态SQL语句。提供映射标签,支持对象与数据库的ORM字段关系映射。
结合图3所示,本公开实施例提供了一种SQL语句的语法检查方法,包括:
步骤S301,获取待检查语句的数据源和语句配置信息;
步骤S302,对数据源进行查询,得到待检查语句对应的数据源名称,并根据数据源名称从语句配置信息中匹配出待检查语句对应的语句调用对象;
步骤S303,根据预设的语句执行参数反射调用语句调用对象,以执行待检查语句,并根据执行结果确定待检查语句的语法检查结果。
采用本公开实施例提供的SQL语句的语法检查方法,通过待检查语句的数据源查询得到数据源名称,根据查询得到的数据源名称从语句配置信息中匹配语句调用对象,再基于语句调用对象和预设的语句执行参数执行待检查语句,并根据执行结果确定待检查语句的语法检查结果。这样,相较于静态SQL检查或在线SQL检查,借助数据源和语句配置信息得到待检查语句,同时,借助JAVA反射机制调用语句调用对象,以执行待检查语句,进而根据执行结果确定语法检查结果,实现了在日常生产环境中动态检查SQL语句的语法,从而提高了SQL语句的语法检测效率。
在一些实施例中,通过jar包的形式在生产系统中建立一个新的单元测试类,通过该单元测试类实施本公开实施例提供的SQL语句的语法检查方法。
可选地,对数据源进行查询,得到待检查语句对应的数据源名称,包括:数据源包括Spring容器;从Spring容器中的ApplicationContext接口提取SqlSessionFactory对象,并从SqlSessionFactory对象中提取MappedStatement对象;对MappedStatement对象进行解析,得到待检查语句对应的数据源名称,其中,数据源名称包括映射接口名称和映射接口名称对应的方法名称。
在一些实施例中,将注册在生产系统的数据库执行语句确定为待检查语句。
在一些实施例中,ApplicationContext(应用前后关系)接口是Spring容器中的一个核心接口,允许容器通过应用程序上下文环境创建、获取、管理bean,并为应用程序提供配置的中央接口,其中,ApplicationContext接口的配置文件中配置了SqlSessionFactory对象。
在一些实施例中,SqlSessionFactory(SQL会话工厂)对象作为MyBatis的核心对象,用于初始化MyBatis、读取配置文件、创建SqlSession对象等。
在一些实施例中,在生产系统中注册的SQL语句会封装在MappedStatement对象中,每个MappedStatement(数据库操作程序单元)对象封装了一条SQL语句对应的语句信息,包括方法名称(Method名称)和与方法名称配对的映射接口名称(Mapper类名称),其中,每条SQL语句因传递参数的值不同导致最终生成的SQL语句也不尽相同。
在一些实施例中,Mybatis对MySQL数据库进行查询的过程依次包括引入配置、基于配置创建SqlSessionFactory对象、通过SqlSessionFactory对象创建SqlSession对象、通过SqlSession对象执行SQL语句、通过MappedStatement对象记录执行语句信息、执行器执行、返回封装。
在一些实施例中,从Spring容器中获取ApplicationContext接口的配置文件,并送获取到的配置文件中获取所有SqlSessionFactory对象,遍历处理每一个SqlSessionFactory对象;从SqlSessionFactory获取所有MappedStatement对象,遍历处理每一个MappedStatement;根据Mappedstatement的statement Id解析出Mapper类名和Mapper类中对应的Method名称。
可选地,根据数据源名称从语句配置信息中匹配出待检查语句对应的语句调用对象,包括:语句配置信息包括SqlSession对象和Mapper类;根据映射接口标识从SqlSession对象中匹配出对应的映射接口对象,并根据方法标识从Mapper类中匹配出对应的方法对象;将映射接口对象和方法对象确定为待检查语句对应的语句调用对象。
在一些实施例中,SqlSession对象(SQL会话对象)是MyBatis操作数据库的核心对象,SqlSession对象提供了数据表的CRUD(增删改查)对应的API方法,并根据Statement Id和参数来操作数据库。
在一些实施例中,Mapper(数据映射接口)类是一种辅助MyBatis操作数据库的组件,提供提供极其方便的单表增删改查;Mapper类对应的Mapper对象通过FactoryBean接口中定义的getObject()方法来获取。
在一些实施例中,根据Mapper类名从SqlSession对象中获取映射接口对象(Mapper对象),并根据Method名称从Mapper类中获取方法对象(Method对象)。
可选地,通过以下方法获取语句执行参数:获取待检查语句对应的执行参数类型;根据执行参数类型从预设生成规则中匹配出对应的目标生成规则;根据目标生成规则生成待检查语句的语句执行参数。
可选地,获取方法对象的形式参数列表,并将形式参数列表中的方法参数类型确定为待检查语句对应的执行参数类型。
在一些实施例中,方法对象存储了方法的信息,包括方法的形式参数列表,返回值,方法的名称等内容,我们可以直接通过Method对象来获取这些信息。
可选地,根据目标生成规则生成待检查语句的语句执行参数,包括以下至少一种:若执行参数类型包括对象类型,则基于反射机制建立对象类型对应的新对象,并将对象类型的预设对象参数传入新对象,将新对象确定为对象类型的语句执行参数;若执行参数类型包括字符串类型,则将预设的字符串确定为字符串类型对应的语句执行参数;若执行参数类型包括数组类型,则将预设的整型数组确定为数组类型对应的语句执行参数;若执行参数类型包括数值类型,则将预设的整型数组确定为数组类型对应的语句执行参数。
这样,相较于专门获取参数列表,根据执行参数类型自动生成语句执行参数,提高了获取效率,进而提高了SQL语句的语法检测效率。
在一些实施例中,若执行参数类型包括对象类型,使用反射新建对象,并给新对象的每个成员赋值。
在一些实施例中,如果是String参数,默认使用“1”作为语句执行参数。
在一些实施例中,通过JAVA反射机制调用方法对象,其中,Java反射机制作为Java语言的一个重要特性,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。它能够在系统运行时动态获取类的实例,大大提高系统的灵活性和扩展性,针对JAVA这种先编译再运行的语言,便于创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象。
可选地,通过以下方法生成执行结果:将待检查语句的语句执行方式修改为explain方式,以在执行待检查语句时生成执行结果。
在一些实施例中,oracle或mysql具有explain功能,在select语句之前增加explain关键字,MySQL会在查询上设置一个标记,执行查询不会执行这条SQL语句,而是返回执行计划信息,将执行计算信息确定作为待检查语句的执行结果,其中,执行计划信息包括该SQL语句的性能统计指标。
可选地,根据执行结果确定待检查语句的语法检查结果,包括:若执行结果包括执行成功,则将待检查语句记录为正常语句;若执行结果包括执行失败,则将待检查语句记录为异常语句,并对执行结果进行解析,得到异常语句对应的异常信息。
在一些实施例中,将执行结果中的失败信息和/或性能统计指标作为异常语句中的异常信息。
这样,在待检查语句执行失败后,记录异常语句并生成异常信息,便于用户对异常语句进行查看,提高了语法错误的排查效率,从而提高业务生产效率。
结合图4所示,本公开实施例提供了一种SQL语句的语法检查方法,包括:
步骤S401,从Spring容器中的ApplicationContext接口提取SqlSessionFactory对象;
步骤S402,从SqlSessionFactory对象中提取MappedStatement对象;
步骤S403,对MappedStatement对象进行解析,得到待检查语句对应的数据源名称;
其中,数据源名称包括映射接口名称和映射接口名称对应的方法名称;
步骤S404,根据映射接口标识从SqlSession对象中匹配出对应的映射接口对象;
步骤S405,根据方法标识从Mapper类中匹配出对应的方法对象;
步骤S406,将映射接口对象和方法对象确定为待检查语句对应的语句调用对象;
步骤S407,根据待检查语句对应的执行参数类型生成语句执行参数;
步骤S408,根据语句执行参数反射调用语句调用对象,以执行待检查语句;
步骤S409,判断执行结果是否包括执行成功,若是,跳转步骤S410,若否,跳转步骤S411;
步骤S410,将待检查语句记录为正常语句;
步骤S411,将待检查语句记录为异常语句,并对执行结果进行解析,得到异常语句对应的异常信息。
采用本公开实施例提供的SQL语句的语法检查方法,通过待检查语句的数据源查询得到数据源名称,根据查询得到的数据源名称从语句配置信息中匹配语句调用对象,再基于语句调用对象和预设的语句执行参数执行待检查语句,并根据执行结果确定待检查语句的语法检查结果,具有以下优点:
第一、相较于静态SQL检查或在线SQL检查,借助数据源和语句配置信息得到待检查语句,同时,借助JAVA反射机制调用语句调用对象,以执行待检查语句,进而根据执行结果确定语法检查结果,实现了在日常生产环境中动态检查SQL语句的语法,从而提高了SQL语句的语法检测效率;
第二、相较于专门获取参数列表,根据执行参数类型自动生成语句执行参数,提高了获取效率,进而提高了SQL语句的语法检测效率;
第三、通过JAVA反射机制调用方法对象,在系统运行时动态获取类的实例,大大提高系统的灵活性和扩展性;
第四、在待检查语句执行失败后,记录异常语句并生成异常信息,便于用户对异常语句进行查看,提高了语法错误的排查效率,从而提高业务生产效率。
结合图5所示,本公开实施例提供了一种SQL语句的语法检查系统,包括获取模块501、查询模块502、匹配模块503和检查模块504。获取模块501用于获取待检查语句的数据源和语句配置信息;查询模块502用于对数据源进行查询,得到待检查语句对应的数据源名称;匹配模块503用于根据数据源名称从语句配置信息中匹配出待检查语句对应的语句调用对象;检查模块504用于根据预设的语句执行参数反射调用语句调用对象,以执行待检查语句,并根据执行结果确定待检查语句的语法检查结果。
采用本公开实施例提供的SQL语句的语法检查系统,通过待检查语句的数据源查询得到数据源名称,根据查询得到的数据源名称从语句配置信息中匹配语句调用对象,再基于语句调用对象和预设的语句执行参数执行待检查语句,并根据执行结果确定待检查语句的语法检查结果。这样,相较于静态SQL检查或在线SQL检查,借助数据源和语句配置信息得到待检查语句,同时,借助JAVA反射机制调用语句调用对象,以执行待检查语句,进而根据执行结果确定语法检查结果,实现了在日常生产环境中动态检查SQL语句的语法,从而提高了SQL语句的语法检测效率。
可选地,查询模块通过以下方式对数据源进行查询,得到待检查语句对应的数据源名称:数据源包括Spring容器;从Spring容器中的ApplicationContext接口提取SqlSessionFactory对象,并从SqlSessionFactory对象中提取MappedStatement对象;对MappedStatement对象进行解析,得到待检查语句对应的数据源名称,其中,数据源名称包括映射接口名称和映射接口名称对应的方法名称。
可选地,匹配模块通过以下方式根据数据源名称从语句配置信息中匹配出待检查语句对应的语句调用对象:语句配置信息包括SqlSession对象和Mapper类;根据映射接口标识从SqlSession对象中匹配出对应的映射接口对象,并根据方法标识从Mapper类中匹配出对应的方法对象;将映射接口对象和方法对象确定为待检查语句对应的语句调用对象。
可选地,检查模块通过以下方法获取语句执行参数:获取待检查语句对应的执行参数类型;根据执行参数类型从预设生成规则中匹配出对应的目标生成规则;根据目标生成规则生成待检查语句的语句执行参数。
可选地,检查模块通过以下方法根据目标生成规则生成待检查语句的语句执行参数,包括以下至少一种:若执行参数类型包括对象类型,则基于反射机制建立对象类型对应的新对象,并将对象类型的预设对象参数传入新对象,将新对象确定为对象类型的语句执行参数;若执行参数类型包括字符串类型,则将预设的字符串确定为字符串类型对应的语句执行参数;若执行参数类型包括数组类型,则将预设的整型数组确定为数组类型对应的语句执行参数;若执行参数类型包括数值类型,则将预设的整型数组确定为数组类型对应的语句执行参数。
可选地,检查模块通过以下方法通过以下方法生成执行结果:将待检查语句的语句执行方式修改为explain方式,以在执行待检查语句时生成执行结果。
可选地,检查模块通过以下方法根据执行结果确定待检查语句的语法检查结果:若执行结果包括执行成功,则将待检查语句记录为正常语句;若执行结果包括执行失败,则将待检查语句记录为异常语句,并对执行结果进行解析,得到异常语句对应的异常信息。
图6示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。需要说明的是,图6示出的电子设备的计算机系统600仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理单元(Central Processing Unit,CPU)601,其可以根据存储在只读存储器(Read-Only Memory,ROM)602中的程序或者从储存部分608加载到随机访问存储器(Random Access Memory,RAM)603中的程序而执行各种适当的动作和处理,例如执行上述实施例中的方法。在RAM 603中,还存储有系统操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(Input/Output,I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分607;包括硬盘等的储存部分608;以及包括诸如LAN(Local Area Network,局域网)卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入储存部分608。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
本公开实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本实施例中的任一项方法。
本公开实施例中的计算机可读存储介质,本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例公开的电子设备,包括处理器、存储器、收发器和通信接口,存储器和通信接口与处理器和收发器连接并完成相互间的通信,存储器用于存储计算机程序,通信接口用于进行通信,处理器和收发器用于运行计算机程序,使电子设备执行如上方法的各个步骤。
在本实施例中,存储器可能包含随机存取存储器(Random Access Memory,简称RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、图形处理器(Graphics Processing Unit,简称GPU),网络处理器(NetworkProcessor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
以上描述和附图充分地示出了本公开的实施例,以使本领域的技术人员能够实践它们。其他实施例可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选地,并且操作的顺序可以变化。一些实施例的部分和子样本可以被包括在或替换其他实施例的部分和子样本。而且,本申请中使用的用词仅用于描述实施例并且不用于限制权利要求。如在实施例以及权利要求的描述中使用的,除非上下文清楚地表明,否则单数形式的“一个”(a)、“一个”(an)和“”(the)旨在同样包括复数形式。类似地,如在本申请中所使用的术语“和/或”是指包含一个或一个以上相关联的列出的任何以及所有可能的组合。另外,当用于本申请中时,术语“包括”(comprise)及其变型“包括”(comprises)和/或包括(comprising)等指陈述的子样本、整体、步骤、操作、元素,和/或组件的存在,但不排除一个或一个以上其它子样本、整体、步骤、操作、元素、组件和/或这些的分组的存在或添加。在没有更多限制的情况下,由语句“包括一个…”限定的要素,并不排除在包括要素的过程、方法或者设备中还存在另外的相同要素。本文中,每个实施例重点说明的可以是与其他实施例的不同之处,各个实施例之间相同相似部分可以互相参见。对于实施例公开的方法、产品等而言,如果其与实施例公开的方法部分相对应,那么相关之处可以参见方法部分的描述。
本领域技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,可以取决于技术方案的特定应用和设计约束条件。技术人员可以对每个特定的应用来使用不同方法以实现所描述的功能,但是这种实现不应认为超出本公开实施例的范围。技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本文所披露的实施例中,所揭露的方法、产品(包括但不限于装置、设备等),可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,可以仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些子样本可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例。另外,在本公开实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
附图中的流程图和框图显示了根据本公开实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。在附图中的流程图和框图所对应的描述中,不同的方框所对应的操作或步骤也可以以不同于描述中所披露的顺序发生,有时不同的操作或步骤之间不存在特定的顺序。例如,两个连续的操作或步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
Claims (10)
1.一种SQL语句的语法检查方法,其特征在于,包括:
获取待检查语句的数据源和语句配置信息;
对所述数据源进行查询,得到所述待检查语句对应的数据源名称,并根据所述数据源名称从所述语句配置信息中匹配出所述待检查语句对应的语句调用对象;
根据预设的语句执行参数反射调用所述语句调用对象,以执行所述待检查语句,并根据执行结果确定所述待检查语句的语法检查结果。
2.根据权利要求1所述的方法,其特征在于,对所述数据源进行查询,得到所述待检查语句对应的数据源名称,包括:
所述数据源包括Spring容器;
从所述Spring容器中的ApplicationContext接口提取SqlSessionFactory对象,并从所述SqlSessionFactory对象中提取MappedStatement对象;
对所述MappedStatement对象进行解析,得到所述待检查语句对应的数据源名称,其中,所述数据源名称包括映射接口名称和所述映射接口名称对应的方法名称。
3.根据权利要求2所述的方法,其特征在于,根据所述数据源名称从所述语句配置信息中匹配出所述待检查语句对应的语句调用对象,包括:
所述语句配置信息包括SqlSession对象和Mapper类;
根据所述映射接口标识从所述SqlSession对象中匹配出对应的映射接口对象,并根据所述方法标识从所述Mapper类中匹配出对应的方法对象;
将所述映射接口对象和所述方法对象确定为所述待检查语句对应的语句调用对象。
4.根据权利要求1所述的方法,其特征在于,通过以下方法获取所述语句执行参数:
获取所述待检查语句对应的执行参数类型;
根据所述执行参数类型从预设生成规则中匹配出对应的目标生成规则;
根据所述目标生成规则生成所述待检查语句的语句执行参数。
5.根据权利要求4所述的方法,其特征在于,根据所述目标生成规则生成所述待检查语句的语句执行参数,包括以下至少一种:
若所述执行参数类型包括对象类型,则基于反射机制建立所述对象类型对应的新对象,并将所述对象类型的预设对象参数传入所述新对象,将所述新对象确定为所述对象类型的语句执行参数;
若所述执行参数类型包括字符串类型,则将预设的字符串确定为所述字符串类型对应的语句执行参数;
若所述执行参数类型包括数组类型,则将预设的整型数组确定为所述数组类型对应的语句执行参数;
若所述执行参数类型包括数值类型,则将预设的整型数组确定为所述数组类型对应的语句执行参数。
6.根据权利要求1至5任一项所述的方法,其特征在于,通过以下方法生成执行结果:
将所述待检查语句的语句执行方式修改为explain方式,以在执行所述待检查语句时生成执行结果。
7.根据权利要求1至5任一项所述的方法,其特征在于,根据执行结果确定所述待检查语句的语法检查结果,包括:
若执行结果包括执行成功,则将所述待检查语句记录为正常语句;
若执行结果包括执行失败,则将所述待检查语句记录为异常语句,并对所述执行结果进行解析,得到所述异常语句对应的异常信息。
8.一种SQL语句的语法检查系统,其特征在于,包括:
获取模块,用于获取待检查语句的数据源和语句配置信息;
查询模块,用于对所述数据源进行查询,得到所述待检查语句对应的数据源名称;
匹配模块,用于根据所述数据源名称从所述语句配置信息中匹配出所述待检查语句对应的语句调用对象;
检查模块,用于根据预设的语句执行参数反射调用所述语句调用对象,以执行所述待检查语句,并根据执行结果确定所述待检查语句的语法检查结果。
9.一种电子设备,其特征在于,包括:处理器及存储器;
所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述电子设备执行如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:
所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310159470.1A CN116149666A (zh) | 2023-02-16 | 2023-02-16 | Sql语句的语法检查方法、系统、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310159470.1A CN116149666A (zh) | 2023-02-16 | 2023-02-16 | Sql语句的语法检查方法、系统、电子设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116149666A true CN116149666A (zh) | 2023-05-23 |
Family
ID=86354124
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310159470.1A Pending CN116149666A (zh) | 2023-02-16 | 2023-02-16 | Sql语句的语法检查方法、系统、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116149666A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117055895A (zh) * | 2023-08-07 | 2023-11-14 | 北京东方金信科技股份有限公司 | 一种将sql语句转换为http接口的方法、系统和可读介质 |
-
2023
- 2023-02-16 CN CN202310159470.1A patent/CN116149666A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117055895A (zh) * | 2023-08-07 | 2023-11-14 | 北京东方金信科技股份有限公司 | 一种将sql语句转换为http接口的方法、系统和可读介质 |
CN117055895B (zh) * | 2023-08-07 | 2024-03-29 | 北京东方金信科技股份有限公司 | 一种将sql语句转换为http接口的方法、系统和可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11907247B2 (en) | Metadata hub for metadata models of database objects | |
US8959106B2 (en) | Class loading using java data cartridges | |
US8447744B2 (en) | Extensibility platform using data cartridges | |
US9886369B2 (en) | Dynamic data fabrication for database applications | |
US11645340B2 (en) | Data store interface including application configurable format constraints for use in accessing or visualization of values stored an in-memory cache | |
US20210357577A1 (en) | Logical, recursive definition of data transformations | |
US20210209098A1 (en) | Converting database language statements between dialects | |
CN112930529B (zh) | 从概念数据模型生成软件工件 | |
US10452628B2 (en) | Data analysis schema and method of use in parallel processing of check methods | |
JP2015130161A (ja) | 階層参照データにおけるコンフリクトを解消する方法およびシステム | |
US11775517B2 (en) | Query content-based data generation | |
CN116149666A (zh) | Sql语句的语法检查方法、系统、电子设备及可读存储介质 | |
US20220222253A1 (en) | Sql statement generator | |
US20190004927A1 (en) | Accessing application runtime data using a query language | |
JP2024505236A (ja) | データ処理システム用のデータセットマルチプレクサ | |
US10423618B2 (en) | Method and system for enforcing user policy on database records | |
US10713150B1 (en) | Accurate test coverage of generated code | |
US20120203744A1 (en) | Maintaining data integrity across execution environments | |
CN117009397A (zh) | 数据查询方法、数据查询装置、电子设备和存储介质 | |
US11720553B2 (en) | Schema with methods specifying data rules, and method of use | |
Andročec et al. | Ontology-based resolution of cloud data lock-in problem | |
US11940951B2 (en) | Identification and import of metadata for extensions to database artefacts | |
CN117234466B (zh) | 企业管理软件开发方法、系统、设备及存储介质 | |
US20160117237A1 (en) | Systems and/or methods for monitoring live software | |
US20230334268A1 (en) | Logical pointers supporting reuse of text translations |
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 |