SQL语句提取方法、装置、设备及可读存储介质与流程

未命名 08-15 阅读:184 评论:0

sql语句提取方法、装置、设备及可读存储介质
技术领域
1.本发明涉及计算机信息技术领域,尤其涉及一种sql语句提取方法、装置、设备及可读存储介质。


背景技术:

2.在信息化项目的运维过程中,经常会遇见数据排查的场景,这种情况下,我们需要取得业务对应的sql(structuredquerylanguage,结构化查询语言)语句,进行数据和逻辑的校验,能否快速的从信息化项目(比如java项目,其中,java为一种面向对象的程序语言)中获取到对应的业务sql语句,在很大程度上影响着信息化项目运维的响应速度,因此需要有一种能够快速的从信息化项目中获取业务sql的方法来支撑运维活动。目前收集业务sql的主流方法是通过elk(elk为三个开源软件的缩写,分别为elasticsearch、logstash及kibana)方案进行,其中,通过logstash抽取系统日志,将数据存入elasticsearch进行检索,而kibana为elasticsearch提供可视化的web(world wideweb,即全球广域网,也称为万维网)展示,这种方法存在着复杂度较高,对运维人员的技术要求性较高,严重依赖系统的日志输出的问题。


技术实现要素:

3.本发明的主要目的在于提供一种sql语句提取方法、装置、设备及可读存储介质,旨在解决目前基于elk提取sql语句的方案存在着复杂度较高,对运维人员的技术要求性较高,严重依赖系统的日志输的技术问题。
4.第一方面,本发明提供一种sql语句提取方法,所述sql语句提取方法包括:
5.获取java项目所使用的业务标记和数据库信息;
6.在java项目启动时,启动探针工具,所述探针工具包括业务标记拦截器和sql语句拦截器;
7.业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句。
8.可选的,所述启动探针工具包括:
9.通过javaagent命令,加载包含探针工具的jar包文件,以启动探针工具。
10.可选的,所述业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句包括:
11.业务标记拦截器对业务标记进行拦截,获取与业务标记对应的业务标记值,并将与业务标记对应的业务标记值存入线程上下文变量;
12.sql语句拦截器从线程上下文变量获取与业务标记对应的业务标记值;
13.sql语句拦截器基于数据库信息确定数据库执行对象;
14.通过数据库执行对象获取带参数的可执行sql语句和不带参数的原始sql语句,将带参数的可执行sql语句和不带参数的原始sql语句作为与业务标记对应的sql语句。
15.可选的,在所述获取java项目所使用的业务标记和数据库信息之前,包括:
16.通过java注解,对java项目进行业务标记。
17.可选的,在所述业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句之后,包括:
18.存储与业务标记对应的业务标记值和sql语句;
19.将存储的与业务标记对应的业务标记值和sql语句,进行可视化展示。
20.第二方面,本发明还提供一种sql语句提取装置,所述sql语句提取装置包括:
21.获取模块,用于获取java项目所使用的业务标记和数据库信息;
22.启动模块,用于在java项目启动时,启动探针工具,所述探针工具包括业务标记拦截器和sql语句拦截器;
23.拦截模块,用于业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句。
24.可选的,所述启动模块,用于:
25.通过javaagent命令,加载包含探针工具的jar包文件,以启动探针工具。
26.可选的,所述拦截模块,用于:
27.业务标记拦截器对业务标记进行拦截,获取与业务标记对应的业务标记值,并将与业务标记对应的业务标记值存入线程上下文变量;
28.sql语句拦截器从线程上下文变量获取与业务标记对应的业务标记值;
29.sql语句拦截器基于数据库信息确定数据库执行对象;
30.通过数据库执行对象获取带参数的可执行sql语句和不带参数的原始sql语句,将带参数的可执行sql语句和不带参数的原始sql语句作为与业务标记对应的sql语句。
31.第三方面,本发明还提供一种sql语句提取设备,所述sql语句提取设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的sql语句提取程序,其中所述sql语句提取程序被所述处理器执行时,实现如上述所述的sql语句提取方法的步骤。
32.第四方面,本发明还提供一种可读存储介质,所述可读存储介质上存储有sql语句提取程序,其中所述sql语句提取程序被处理器执行时,实现如上述所述的sql语句提取方法的步骤。
33.本发明中,获取java项目所使用的业务标记和数据库信息;在java项目启动时,启动探针工具,所述探针工具包括业务标记拦截器和sql语句拦截器;业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句。本发明通过,在java项目启动时,启动探针工具,通过探针工具的业务标记拦截器和sql语句拦截器,获取到与业务标记对应的业务标记值及和sql语句,从而基于探针无入侵的方式在java项目运行时能够高效的获取到所需的sql语句,在编写好探针工具后,探针能够自动化的从java项目中提取sql语句,具有简便,不依赖系统日志,以及对java项目无入侵的特点。
附图说明
34.图1为本发明sql语句提取方法一实施例的流程示意图;
35.图2为图1中步骤s30的细化流程示意图;
36.图3为本发明sql语句提取方法一实施例的业务标记及sql语句提取流程示意图;
37.图4为本发明sql语句提取方法一实施例的sql语句提取及存储展示流程示意图;
38.图5为本发明sql语句提取装置一实施例的功能模块示意图;
39.图6为本发明sql语句提取设备一实施例的硬件结构示意图。
40.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
41.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
42.第一方面,本发明实施例提供了一种sql语句提取方法。
43.为了更清楚地展示本技术实施例提供的sql语句提取方法,首先介绍一下本技术实施例提供的sql语句提取方法的应用场景。
44.本技术实施例提供的sql语句提取方法应用于在信息化项目(比如java项目)的运维过程中,经常会遇见数据排查的场景,这种情况下,我们需要取得业务对应的sql语句,进行数据和逻辑的校验,能否快速的从信息化项目中获取到对应的业务sql语句,在很大程度上影响着信息化项目运维的响应速度,因此需要有一种能够快速的从信息化项目中获取业务sql的方法来支撑运维活动。
45.一实施例中,参照图1,图1为本发明sql语句提取方法一实施例的流程示意图,如图1所示,所述sql语句提取方法包括:
46.步骤s10,获取java项目所使用的业务标记和数据库信息。
47.本实施例中,java项目是指使用java程序语言编写的,用于完成某种特定功能的项目,在java项目中,可通过注解的方式,对java项目中需要关注的业务类和方法进行标记,数据库信息主要是指java项目所使用的数据库的类型及版本信息,比如所使用的数据库是mysql还是oracle,以及对应的数据库是什么版本,在这里获取java项目所使用的业务标记和数据库信息的目的,是便于后续探针在提取sql语句时使用。
48.步骤s20,在java项目启动时,启动探针工具,所述探针工具包括业务标记拦截器和sql语句拦截器。
49.本实施例中,可提前编写好探针工具,探针工具主要包括业务标记拦截器和sql语句拦截器,提前定义好业务标记拦截器和sql语句拦截器,在java项目启动时,启动探针工具,对java项目进行编译后的字节码进行增强,即通过探针工具的业务标记拦截器和sql语句拦截器,对业务标记和sql语句进行拦截,以探针的方式,不入侵java项目本身,实现对sql语句的提取。
50.步骤s30,业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句。
51.本实施例中,通过探针工具的业务标记拦截器和sql语句拦截器,对业务标记和sql语句进行拦截,获取到与业务标记对应的业务标记值和sql语句。
52.本实施例中,首先获取需要提取sql语句的java项目所使用的业务标记和数据库的类型及版本信息,可提前编写好探针工具,在java项目启动时,启动探针工具,通过探针工具的业务标记拦截器和sql语句拦截器,对业务标记和sql语句进行拦截,获取到与业务标记对应的业务标记值及和sql语句,从而基于探针无入侵的方式在java项目运行时能够
高效的获取到所需的sql语句,通过探针能够自动化的从java项目中提取sql语句,具有简便,不依赖系统日志,以及对java项目无入侵的特点。
53.进一步地,一实施例中,步骤s20包括:
54.通过javaagent命令,加载包含探针工具的jar包文件,以启动探针工具。
55.本实施例中,javaagent又叫做java探针,可动态的修改java项目的字节码,java项目代码被编译之后形成字节码被jvm(javavirtualmachine,java虚拟机)执行,在jvm执行这些字节码之前获取这些字节码信息,并通过字节码转换器对这些字节码进行修改,来完成特定的功能。本实施例中,在java虚拟机启动时,在执行main()函数之前,java虚拟机通过javaagent命令指定jar包,然后执行针探针工具jar包中的premain()方法,premain()方法即main()函数之前的一个拦截器,先执行premain()方法然后再执行main()方法。通过在premain()方法中定义我们需要用到的业务标记拦截器和sql语句拦截器,来实现对sql语句的提取。
56.进一步地,一实施例中,参照图2,图2为图1中步骤s30的细化流程示意图,如图2所示,步骤s30包括:
57.步骤s301,业务标记拦截器对业务标记进行拦截,获取与业务标记对应的业务标记值,并将与业务标记对应的业务标记值存入线程上下文变量;
58.步骤s302,sql语句拦截器从线程上下文变量获取与业务标记对应的业务标记值;
59.步骤s303,sql语句拦截器基于数据库信息确定数据库执行对象;
60.步骤s304,通过数据库执行对象获取带参数的可执行sql语句和不带参数的原始sql语句,将带参数的可执行sql语句和不带参数的原始sql语句作为与业务标记对应的sql语句。
61.本实施例中,首先业务标记拦截器对业务标记进行拦截,获取到与业务标记对应的业务标记值,并将与业务标记对应的业务标记值存入线程上下文变量threadlocal中,然后sql语句拦截器,根据数据库的类型及版本信息可以确定java项目操作数据所使用的数据库类和方法,java项目在运行时,类和方法将被实例化为对象,进而确定数据库执行对象,例如数据库执行对象为preparedstatement,进一步通过preparedstatement即可以获取到带参数的可执行sql语句和不带参数的原始sql语句,将带参数的可执行sql语句和不带参数的原始sql语句作为与业务标记对应的sql语句,以及从线程上下文变量获取与业务标记对应的业务标记值,从而通过业务标记拦截器和sql语句拦截器,即可以获取到与业务标记对应的业务标记值和sql语句。其中,通过数据库执行对象获取带参数的可执行sql语句和不带参数的原始sql语句的原理为:数据库执行对象preparedstatement是java.sql包下面的一个接口,用来执行sql语句查询,通过调用connection.preparedstatement(sql)方法可以获得preparedstatment对象,数据库系统会对sql语句进行预编译处理(如果jdbc驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重复使用,因此,通过preparedstatment对象即可以方便的获取到sql语句。其中,jdbc(javadatabaseconnectivity,java数据库连接)是一种用于执行sql语句的javaapi,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成,jdbc提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
62.进一步地,一实施例中,参照图3,图3为本发明sql语句提取方法一实施例的业务标记及sql语句提取流程示意图,如图3所示,在步骤s10之前,包括:
63.步骤s00,通过java注解,对java项目进行业务标记。
64.本实施例中,java注解又称java标注,提供了一种安全的类似注释的机制,用来将任何的信息或元数据与程序元素(类、方法、成员变量等)进行关联,java注解通过在附加代码中的一些元信息,结合一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。在使用java注解,对java项目进行业务标记后,在后续的步骤中,即可以通过业务标记拦截器对业务标记进行拦截,获取到与业务标记对应的业务标记值。
65.进一步地,一实施例中,参照图4,图4为本发明sql语句提取方法一实施例的sql语句提取及存储展示流程示意图,如图4所示,在步骤s30之后,包括:
66.步骤s40,存储与业务标记对应的业务标记值和sql语句;
67.步骤s50,将存储的与业务标记对应的业务标记值和sql语句,进行可视化展示。
68.本实施例中,将提取到的与业务标记对应的业务标记值和sql语句,存储在数据库中,进一步的进行web可视化的直观展示,从而便于运维人员根据业务标记值和sql语句,对java项目进行数据和逻辑的校验。
69.第二方面,本发明实施例还提供一种sql语句提取装置。
70.参照图5,图5为本发明sql语句提取装置一实施例的功能模块示意图。
71.本实施例中,所述sql语句提取装置包括:
72.获取模块10,用于获取java项目所使用的业务标记和数据库信息;
73.启动模块20,用于在java项目启动时,启动探针工具,所述探针工具包括业务标记拦截器和sql语句拦截器;
74.拦截模块30,用于业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句。
75.进一步地,一实施例中,启动模块20,用于:
76.通过javaagent命令,加载包含探针工具的jar包文件,以启动探针工具。
77.进一步地,一实施例中,拦截模块30,用于:
78.业务标记拦截器对业务标记进行拦截,获取与业务标记对应的业务标记值,并将与业务标记对应的业务标记值存入线程上下文变量;
79.sql语句拦截器从线程上下文变量获取与业务标记对应的业务标记值;
80.sql语句拦截器基于数据库信息确定数据库执行对象;
81.通过数据库执行对象获取带参数的可执行sql语句和不带参数的原始sql语句,将带参数的可执行sql语句和不带参数的原始sql语句作为与业务标记对应的sql语句。
82.进一步地,一实施例中,所述sql语句提取装置,还包括业务标记模块,用于:
83.通过java注解,对java项目进行业务标记。
84.进一步地,一实施例中,所述sql语句提取装置,还包括存储展示模块,用于:
85.存储与业务标记对应的业务标记值和sql语句;
86.将存储的与业务标记对应的业务标记值和sql语句,进行可视化展示。
87.其中,上述sql语句提取装置中各个模块的功能实现与上述sql语句提取方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
88.第三方面,本发明实施例提供一种sql语句提取设备,该sql语句提取设备可以是个人计算机(personalcomputer,pc)、笔记本电脑、服务器等具有数据处理功能的设备。
89.参照图6,图6为本发明sql语句提取设备一实施例的硬件结构示意图。本发明实施例中,sql语句提取设备可以包括处理器1001(例如中央处理器centralprocessingunit,cpu),通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信;用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard);网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真wireless-fidelity,wi-fi接口);存储器1005可以是高速随机存取存储器(randomaccessmemory,ram),也可以是稳定的存储器(non-volatile memory),例如磁盘存储器,存储器1005可选的还可以是独立于前述处理器1001的存储装置。本领域技术人员可以理解,图6中示出的硬件结构并不构成对本发明的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
90.继续参照图6,图6中作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及sql语句提取程序。其中,处理器1001可以调用存储器1005中存储的sql语句提取程序,并执行本发明实施例提供的sql语句提取方法。
91.第四方面,本发明实施例还提供一种可读存储介质。
92.本发明可读存储介质上存储有sql语句提取程序,其中所述sql语句提取程序被处理器执行时,实现如上述的sql语句提取方法的步骤。
93.其中,sql语句提取程序被执行时所实现的方法可参照本发明sql语句提取方法的各个实施例,此处不再赘述。
94.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
95.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
96.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本发明各个实施例所述的方法。
97.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

技术特征:
1.一种sql语句提取方法,其特征在于,所述sql语句提取方法包括:获取java项目所使用的业务标记和数据库信息;在java项目启动时,启动探针工具,所述探针工具包括业务标记拦截器和sql语句拦截器;业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句。2.如权利要求1所述的sql语句提取方法,其特征在于,所述启动探针工具包括:通过javaagent命令,加载包含探针工具的jar包文件,以启动探针工具。3.如权利要求1所述的sql语句提取方法,其特征在于,所述业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句包括:业务标记拦截器对业务标记进行拦截,获取与业务标记对应的业务标记值,并将与业务标记对应的业务标记值存入线程上下文变量;sql语句拦截器从线程上下文变量获取与业务标记对应的业务标记值;sql语句拦截器基于数据库信息确定数据库执行对象;通过数据库执行对象获取带参数的可执行sql语句和不带参数的原始sql语句,将带参数的可执行sql语句和不带参数的原始sql语句作为与业务标记对应的sql语句。4.如权利要求1所述的sql语句提取方法,其特征在于,在所述获取java项目所使用的业务标记和数据库信息之前,包括:通过java注解,对java项目进行业务标记。5.如权利要求1所述的sql语句提取方法,其特征在于,在所述业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句之后,包括:存储与业务标记对应的业务标记值和sql语句;将存储的与业务标记对应的业务标记值和sql语句,进行可视化展示。6.一种sql语句提取装置,其特征在于,所述sql语句提取装置包括:获取模块,用于获取java项目所使用的业务标记和数据库信息;启动模块,用于在java项目启动时,启动探针工具,所述探针工具包括业务标记拦截器和sql语句拦截器;拦截模块,用于业务标记拦截器和sql语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和sql语句。7.如权利要求6所述的sql语句提取装置,其特征在于,所述启动模块,用于:通过javaagent命令,加载包含探针工具的jar包文件,以启动探针工具。8.如权利要求6所述的sql语句提取装置,其特征在于,所述拦截模块,用于:业务标记拦截器对业务标记进行拦截,获取与业务标记对应的业务标记值,并将与业务标记对应的业务标记值存入线程上下文变量;sql语句拦截器从线程上下文变量获取与业务标记对应的业务标记值;sql语句拦截器基于数据库信息确定数据库执行对象;通过数据库执行对象获取带参数的可执行sql语句和不带参数的原始sql语句,将带参数的可执行sql语句和不带参数的原始sql语句作为与业务标记对应的sql语句。
9.一种sql语句提取设备,其特征在于,所述sql语句提取设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的sql语句提取程序,其中所述sql语句提取程序被所述处理器执行时,实现如权利要求1至5中任一项所述的sql语句提取方法的步骤。10.一种可读存储介质,其特征在于,所述可读存储介质上存储有sql语句提取程序,其中所述sql语句提取程序被处理器执行时,实现如权利要求1至5中任一项所述的sql语句提取方法的步骤。

技术总结
本发明提供一种SQL语句提取方法、装置、设备及可读存储介质,SQL语句提取方法包括:获取java项目所使用的业务标记和数据库信息;在java项目启动时,启动探针工具,所述探针工具包括业务标记拦截器和SQL语句拦截器;业务标记拦截器和SQL语句拦截器,使用业务标记和数据库信息,获取与业务标记对应的业务标记值和SQL语句。通过本发明,基于探针无入侵的方式在java项目运行时能够高效的获取到所需的SQL语句,在编写好探针工具后,探针能够自动化的从java项目中提取SQL语句,具有简便,不依赖系统日志,以及对java项目无入侵的特点。以及对java项目无入侵的特点。以及对java项目无入侵的特点。


技术研发人员:乐阳 费一航 肖葱葱 周游 刘强
受保护的技术使用者:东风汽车集团股份有限公司
技术研发日:2023.05.16
技术公布日:2023/8/14
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐