CN111651468A - 基于sql解析的数据更新方法、装置、电子设备及存储介质 - Google Patents

基于sql解析的数据更新方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN111651468A
CN111651468A CN202010477746.7A CN202010477746A CN111651468A CN 111651468 A CN111651468 A CN 111651468A CN 202010477746 A CN202010477746 A CN 202010477746A CN 111651468 A CN111651468 A CN 111651468A
Authority
CN
China
Prior art keywords
data
sql statement
updating
updated
update
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
CN202010477746.7A
Other languages
English (en)
Other versions
CN111651468B (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.)
Ping An Property and Casualty Insurance Company of China Ltd
Original Assignee
Ping An Property and Casualty Insurance Company of China Ltd
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 Ping An Property and Casualty Insurance Company of China Ltd filed Critical Ping An Property and Casualty Insurance Company of China Ltd
Priority to CN202010477746.7A priority Critical patent/CN111651468B/zh
Priority claimed from CN202010477746.7A external-priority patent/CN111651468B/zh
Publication of CN111651468A publication Critical patent/CN111651468A/zh
Application granted granted Critical
Publication of CN111651468B publication Critical patent/CN111651468B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及数据处理,提供了一种基于SQL解析的数据更新方法、装置、电子设备及存储介质。该方法获取数据更新请求中的SQL语句后,拦截该请求,利用预设的状态机对SQL语句进行解析并构建SQL语句的语法树,基于语法树获取SQL语句对应的表名及操作类型,从预设的配置文件中查找是否存在SQL语句的主键字段,若存在,则获取该主键字段,若不存在,则基于表名从预设数据库的元数据中获取SQL语句的主键字段,基于SQL语句的操作类型和主键字段获取该请求的待更新数据,基于SQL语句的操作类型对待更新数据执行更新操作,得到更新后的数据。本发明还涉及区块链技术,所述待更新数据存储于区块链中。本发明可以准确获取SQL语句更新操作之前的数据。

Description

基于SQL解析的数据更新方法、装置、电子设备及存储介质
技术领域
本发明涉及数据处理,尤其涉及一种基于SQL解析的数据更新方法、装置、电子设备及存储介质。
背景技术
在对被SQL语句更新的数据进行审计追踪时,需要确定SQL语句是对哪一条或哪些条数据进行更新操作,即需要解析SQL语句及确定被更新的数据的主键字段,通常业务***中涉及大量不同类型的SQL语句,导致解析时容易出错,且这些SQL语句中不一定包含主键字段信息,导致难以获取被更新数据的主键字段,进而业务***难以获取被更新的数据来追溯数据的更新过程。
发明内容
鉴于以上内容,本发明提供一种基于SQL解析的数据更新方法、装置、电子设备及存储介质,其目的在于解决现有技术中业务***难以获取被更新的数据导致难以追溯数据更新过程的技术问题。
为实现上述目的,本发明提供一种基于SQL解析的数据更新方法,该方法包括:
接收步骤:接收客户端发出的数据更新的请求,获取所述请求中携带的SQL语句;
解析步骤:拦截所述请求,利用预设的状态机对所述SQL语句进行解析,基于解析结果构建所述SQL语句的语法树,从所述语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于所述JAVA类获取所述SQL语句对应的表名及操作类型;
获取步骤:从预设的配置文件中查找是否存在所述SQL语句对应的主键字段,若存在,则获取该主键字段,若不存在,则基于所述表名从预设数据库的元数据中获取所述SQL语句的主键字段,基于所述SQL语句对应的操作类型和所述主键字段获取所述请求对应的待更新数据;及
更新步骤:基于所述SQL语句对应的操作类型对所述待更新数据执行更新操作,得到所述待更新数据对应的更新后的数据,将所述更新后的数据反馈至所述客户端。
优选的,所述解析步骤包括:
将所述状态机的状态设为初始状态,利用所述状态机去匹配所述SQL语句的操作类型,将匹配到的操作类型作为所述语法树的根节点;
利用所述状态机根据第一预设正则表达式匹配所述SQL语句的更新表,将匹配到的更新表作为所述语法树的子节点;
利用状态机根据第二预设正则表达式匹配所述SQL语句更新字段,将匹配到的更新字段作为所述语法树的子节点。
优选的,所述获取步骤包括:
当所述SQL语句对应的操作类型为***操作时,所述待更新数据为空;
当所述SQL语句对应的操作类型为更新操作时,根据所述SQL语句的更新表、更新字段及更新条件生成选择语句,基于所述主键字段及所述选择语句,获取更新字段的当前值作为所述待更新数据;
当所述SQL语句对应的操作类型为删除操作时,根据所述SQL语句的更新表、更新条件及所述主键字段,获取全量数据作为所述待更新数据。
优选的,所述更新步骤包括:
当所述SQL语句对应的操作类型为***操作时,所述更新后的数据为所述更新字段的值;
当所述SQL语句对应的操作类型为更新操作时,所述更新后的数据为所述更新字段的值;
当所述SQL语句对应的操作类型为删除操作时,所述更新后的数据为空。
优选的,所述待更新数据存储于区块链中,所述方法还包括:
当所述待更新数据执行更新操作时生成该更新操作的时间戳;
将所述SQL语句对应的操作类型、所述待更新数据、所述更新后的数据及所述时间戳封装成预设类型的数据结构发送至消息队列服务器。
为实现上述目的,本发明还提供一种基于SQL解析的数据更新装置,其特征在于,所述装置包括:
接收模块:用于接收客户端发出的数据更新的请求,获取所述请求中携带的SQL语句;
解析模块:用于拦截所述请求,利用预设的状态机对所述SQL语句进行解析,基于解析结果构建所述SQL语句的语法树,从所述语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于所述JAVA类获取所述SQL语句对应的表名及操作类型;
获取模块:用于从预设的配置文件中查找是否存在所述SQL语句对应的主键字段,若存在,则获取该主键字段,若不存在,则基于所述表名从预设数据库的元数据中获取所述SQL语句的主键字段,基于所述SQL语句对应的操作类型和所述主键字段获取所述请求对应的待更新数据;及
更新模块:用于基于所述SQL语句对应的操作类型对所述待更新数据执行更新操作,得到所述待更新数据对应的更新后的数据,将所述更新后的数据反馈至所述客户端。
优选的,所述解析模块包括:
将所述状态机的状态设为初始状态,利用所述状态机去匹配所述SQL语句的操作类型,将匹配到的操作类型作为所述语法树的根节点;
利用所述状态机根据第一预设正则表达式匹配所述SQL语句的更新表,将匹配到的更新表作为所述语法树的子节点;
利用状态机根据第二预设正则表达式匹配所述SQL语句更新字段,将匹配到的更新字段作为所述语法树的子节点。
优选的,所述获取模块包括:
当所述SQL语句对应的操作类型为***操作时,所述待更新数据为空;
当所述SQL语句对应的操作类型为更新操作时,根据所述SQL语句的更新表、更新字段及更新条件生成选择语句,基于所述主键字段及所述选择语句,获取更新字段的当前值作为所述待更新数据;
当所述SQL语句对应的操作类型为删除操作时,根据所述SQL语句的更新表、更新条件及所述主键字段,获取全量数据作为所述待更新数据。
为实现上述目的,本发明还提供一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至5中任一所述的基于SQL解析的数据更新方法。
为实现上述目的,本发明还提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括存储数据区和存储程序区,存储数据区存储根据区块链节点的使用所创建的数据,存储程序区存储有基于SQL解析的数据更新程序,所述基于SQL解析的数据更新程序被处理器执行时,实现如上所述基于SQL解析的数据更新方法的任意步骤。
本发明提出的基于SQL解析的数据更新方法、装置、电子设备及存储介质,可以准确地解析出不同类型的SQL语句,获取主键字段与具体的SQL语句和业务***无关,可以准确地获取SQL更新操作之前的数据,以便业务***能够快速追溯数据变更的过程,该方案不依赖于业务实现,且对业务***没有侵入性,具备一定的通用性。
附图说明
图1为本发明电子设备较佳实施例的示意图;
图2为本发明基于SQL解析的数据更新装置较佳实施例的模块示意图;
图3为本发明基于SQL解析的数据更新方法较佳实施例的流程图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1所示,为本发明电子设备1较佳实施例的示意图。
该电子设备1包括但不限于:存储器11、处理器12、显示器13及网络接口14。所述电子设备1通过网络接口14连接网络,获取原始数据。其中,所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯***(Global System of Mobilecommunication,GSM)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi、通话网络等无线或有线网络。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述电子设备1的内部存储单元,例如该电子设备1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述电子设备1的外部存储设备,例如该电子设备1配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述电子设备1的内部存储单元也包括其外部存储设备。本实施例中,存储器11通常用于存储安装于所述电子设备1的操作***和各类应用软件,例如基于SQL解析的数据更新程序10的程序代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子设备1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行基于SQL解析的数据更新程序10的程序代码等。
显示器13可以称为显示屏或显示单元。在一些实施例中显示器13可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-EmittingDiode,OLED)触摸器等。显示器13用于显示在电子设备1中处理的信息以及用于显示可视化的工作界面,例如显示数据统计的结果。
网络接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),该网络接口14通常用于在所述电子设备1与其它电子设备之间建立通信连接。
图1仅示出了具有组件11-14以及基于SQL解析的数据更新程序10的电子设备1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,所述电子设备1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备1中处理的信息以及用于显示可视化的用户界面。
该电子设备1还可以包括射频(Radio Frequency,RF)电路、传感器和音频电路等等,在此不再赘述。
在上述实施例中,处理器12执行存储器11中存储的基于SQL解析的数据更新程序10时可以实现如下步骤:
接收步骤:接收客户端发出的数据更新的请求,获取所述请求中携带的SQL语句;
解析步骤:拦截所述请求,利用预设的状态机对所述SQL语句进行解析,基于解析结果构建所述SQL语句的语法树,从所述语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于所述JAVA类获取所述SQL语句对应的表名及操作类型;
获取步骤:从预设的配置文件中查找是否存在所述SQL语句对应的主键字段,若存在,则获取该主键字段,若不存在,则基于所述表名从预设数据库的元数据中获取所述SQL语句的主键字段,基于所述SQL语句对应的操作类型和所述主键字段获取所述请求对应的待更新数据;及
更新步骤:基于所述SQL语句对应的操作类型对所述待更新数据执行更新操作,得到所述待更新数据对应的更新后的数据,将所述更新后的数据反馈至所述客户端。
需要强调的是,为进一步保证上述待更新数据的私密和安全性,上述待更新数据还可以存储于一区块链的节点中。
所述存储设备可以为电子设备1的存储器11,也可以为与电子设备1通讯连接的其它存储设备。
关于上述步骤的详细介绍,请参照下述图2关于基于SQL解析的数据更新装置100实施例的功能模块图以及图3关于基于SQL解析的数据更新方法实施例的流程图的说明。
参照图2所示,为本发明基于SQL解析的数据更新装置100的功能模块图。
本发明所述基于SQL解析的数据更新装置100可以安装于电子设备中。根据实现的功能,所述基于SQL解析的数据更新装置可以包括接收模块110、解析模块120、获取模块130及更新模块140。本发所述模块也可以称之为单元,是指一种能够被电子设备处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在电子设备的存储器中。
在本实施例中,关于各模块/单元的功能如下:
接收模块110,用于接收客户端发出的数据更新的请求,获取所述请求中携带的SQL语句。
在本实施例中,数据更新请求可以是数据审计业务中的更新请求,数据审计业务需要对变更的数据进行审计追踪,因此需要获取数据更新操作之前的数据,以便用户能快速追溯变更过程的数据。数据更新操作可以通过SQL语句执行,在接收到客户端发出的数据更新请求时,需要获取请求中携带的SQL语句。SQL语句可以是客户端在提交数据更新请求时一并录入的,也可以是在客户端发出数据更新请求之后,从请求中指定的地址中获取的。需要强调的是,为进一步保证上述待更新数据的私密和安全性,上述待更新数据还可以存储于一区块链的节点中。
解析模块120,用于拦截所述请求,利用预设的状态机对所述SQL语句进行解析,基于解析结果构建所述SQL语句的语法树,从所述语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于所述JAVA类获取所述SQL语句对应的表名及操作类型。
在本实施例中,需要在数据更新请求携带的SQL语句执行之前,获取更新之前的数据,若更新数据的操作一旦执行,更新之前的数据就难以获取了,因此,可以利用Mybatis***对数据更新请求进行拦截,利用预设的状态机对SQL语句进行解析,基于解析结果构建SQL语句的语法树,从语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于JAVA类获取该SQL语句对应的表名及操作类型。
进一步的,将所述状态机的状态设为初始状态,利用所述状态机去匹配所述SQL语句的操作类型,将匹配到的操作类型作为所述语法树的根节点;
利用所述状态机根据第一预设正则表达式匹配所述SQL语句的更新表,将匹配到的更新表作为所述语法树的子节点;
利用状态机根据第二预设正则表达式匹配所述SQL语句更新字段,将匹配到的更新字段作为所述语法树的子节点。
以SQL语句的类型为update操作为例对本实施例进行说明,假设SQL语句为:update person set name=’hello’,age=10where id=1,首先令状态机为初始状态,根据SQL类型进入操作类型解析阶段,匹配SQL语句中的update,若匹配成功,生成update根节点;
状态机进入表列表解析阶段,根据第一正则表达式匹配(表名as别名)(,(表名2as别名2)),此阶段获取表名person,生成更新表的子节点,并添加一个叶子节点person;
之后状态机进入操作字段列表解析阶段,第二正则表达式匹配(字段1=字段1值)(,(字段2=字段2值))解析出更新字段名和值,生成root节点的更新字段的子节点,并将每个更新字段和值生成叶子节点作为更新字段的子节点;
随后状态机进入值类型解析阶段,根据数字、字符串、函数关键字解析出值类型节点;
最后,状态机转到条件语句解析阶段,采用与更新列表类似的匹配方法,解析出条件列表,将每个条件作为叶子节点。
获取模块130,用于从预设的配置文件中查找是否存在所述SQL语句对应的主键字段,若存在,则获取该主键字段,若不存在,则基于所述表名从预设数据库的元数据中获取所述SQL语句的主键字段,基于所述SQL语句对应的操作类型和所述主键字段获取所述请求对应的待更新数据。
在本实施例中,获取主键字段可以使用从预设的配置文件读取和读取数据库元数据两种相结合的方式。具体地,从预先封装的数据结构和Configuration获取ResultMap,进而获取idResultMappings,从而获取SQL语句对应的主键字段名,如果开发者未配置ResultMap,即配置文件中不存在请求中携带的SQL语句的主键字段,则从预设数据库元数据中获取所述请求中携带的SQL语句的主键字段,因为Mybatis框架提供了连接池,使用该连接池可以获取数据库元数据,结合SQL解析出的表名,可以通过Mybatis框架来获取主键字段。进一步地,对该表主键字段进行本地缓存,后续可以快速获得主键字段,提高了获取主键的效率。
其中,当所述SQL语句对应的操作类型为***操作(insert)时,所述待更新数据为空(null);
当所述SQL语句对应的操作类型为更新操作(update)时,根据所述SQL语句的更新表、更新字段及更新条件生成选择语句(select语句),基于所述主键字段及所述选择语句,获取更新字段的当前值作为所述待更新数据;
当所述SQL语句对应的操作类型为删除操作(delete)时,根据所述SQL语句的更新表、更新条件及所述主键字段,获取全量数据作为所述待更新数据。
更新模块140,用于基于所述SQL语句对应的操作类型对所述待更新数据执行更新操作,得到所述待更新数据对应的更新后的数据,将所述更新后的数据反馈至所述客户端。
在本实施例中,基于SQL语句对应的操作类型对待更新数据执行更新操作,得到待更新数据对应的更新后的数据,将更新后的数据反馈至客户端。
其中,当所述SQL语句对应的操作类型为***操作(insert)时,所述更新后的数据为所述更新字段的值;
当所述SQL语句对应的操作类型为更新操作(update)时,所述更新后的数据为所述更新字段的值;
当所述SQL语句对应的操作类型为删除操作(delete)时,所述更新后的数据为空(null)。
进一步的,当所述待更新数据执行更新操作时生成该更新操作的时间戳;将所述SQL语句对应的操作类型、所述待更新数据、所述更新后的数据及所述时间戳封装成预设类型的数据结构发送至消息队列服务器。
为了避免业务***与消息队列服务器之间长时间的网络堵塞,可以使用线程池专门发送审计结果到消息队列服务器,这样业务***就能快速响应用户请求,实现了审计操作几乎不会对原业务***的处理造成延迟。还可以使用recorder微服务专门从消息队列服务器获取审计消息,之后依次将审计结果写入数据库,可以实现了审计数据生成与记录的解耦。
此外,本发明还提供一种基于SQL解析的数据更新方法。参照图3所示,为本发明基于SQL解析的数据更新方法的实施例的方法流程示意图。电子设备1的处理器12执行存储器11中存储的基于SQL解析的数据更新程序10时实现基于SQL解析的数据更新方法的如下步骤:
步骤S10:接收客户端发出的数据更新的请求,获取所述请求中携带的SQL语句。
在本实施例中,数据更新请求可以是数据审计业务中的更新请求,数据审计业务需要对变更的数据进行审计追踪,因此需要获取数据更新操作之前的数据,以便用户能快速追溯变更过程的数据。数据更新操作可以通过SQL语句执行,在接收到客户端发出的数据更新请求时,需要获取请求中携带的SQL语句。SQL语句可以是客户端在提交数据更新请求时一并录入的,也可以是在客户端发出数据更新请求之后,从请求中指定的地址中获取的。需要强调的是,为进一步保证上述待更新数据的私密和安全性,上述待更新数据还可以存储于一区块链的节点中。
步骤S20:拦截所述请求,利用预设的状态机对所述SQL语句进行解析,基于解析结果构建所述SQL语句的语法树,从所述语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于所述JAVA类获取所述SQL语句对应的表名及操作类型。
在本实施例中,需要在数据更新请求携带的SQL语句执行之前,获取更新之前的数据,若更新数据的操作一旦执行,更新之前的数据就难以获取了,因此,可以利用Mybatis***对数据更新请求进行拦截,利用预设的状态机对SQL语句进行解析,基于解析结果构建SQL语句的语法树,从语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于JAVA类获取该SQL语句对应的表名及操作类型。
进一步的,将所述状态机的状态设为初始状态,利用所述状态机去匹配所述SQL语句的操作类型,将匹配到的操作类型作为所述语法树的根节点;
利用所述状态机根据第一预设正则表达式匹配所述SQL语句的更新表,将匹配到的更新表作为所述语法树的子节点;
利用状态机根据第二预设正则表达式匹配所述SQL语句更新字段,将匹配到的更新字段作为所述语法树的子节点。
以SQL语句的类型为update操作为例对本实施例进行说明,假设SQL语句为:update person set name=’hello’,age=10where id=1,首先令状态机为初始状态,根据SQL类型进入操作类型解析阶段,匹配SQL语句中的update,若匹配成功,生成update根节点;
状态机进入表列表解析阶段,根据第一正则表达式匹配(表名as别名)(,(表名2as别名2)),此阶段获取表名person,生成更新表的子节点,并添加一个叶子节点person;
之后状态机进入操作字段列表解析阶段,第二正则表达式匹配(字段1=字段1值)(,(字段2=字段2值))解析出更新字段名和值,生成root节点的更新字段的子节点,并将每个更新字段和值生成叶子节点作为更新字段的子节点;
随后状态机进入值类型解析阶段,根据数字、字符串、函数关键字解析出值类型节点;
最后,状态机转到条件语句解析阶段,采用与更新列表类似的匹配方法,解析出条件列表,将每个条件作为叶子节点。
步骤S30:从预设的配置文件中查找是否存在所述SQL语句对应的主键字段,若存在,则获取该主键字段,若不存在,则基于所述表名从预设数据库的元数据中获取所述SQL语句的主键字段,基于所述SQL语句对应的操作类型和所述主键字段获取所述请求对应的待更新数据。
在本实施例中,获取主键字段可以使用从预设的配置文件读取和读取数据库元数据两种相结合的方式。具体地,从预先封装的数据结构和Configuration获取ResultMap,进而获取idResultMappings,从而获取SQL语句对应的主键字段名,如果开发者未配置ResultMap,即配置文件中不存在请求中携带的SQL语句的主键字段,则从预设数据库元数据中获取所述请求中携带的SQL语句的主键字段,因为Mybatis框架提供了连接池,使用该连接池可以获取数据库元数据,结合SQL解析出的表名,可以通过Mybatis框架来获取主键字段。进一步地,对该表主键字段进行本地缓存,后续可以快速获得主键字段,提高了获取主键的效率。
其中,当所述SQL语句对应的操作类型为***操作(insert)时,所述待更新数据为空(null);
当所述SQL语句对应的操作类型为更新操作(update)时,根据所述SQL语句的更新表、更新字段及更新条件生成选择语句(select语句),基于所述主键字段及所述选择语句,获取更新字段的当前值作为所述待更新数据;
当所述SQL语句对应的操作类型为删除操作(delete)时,根据所述SQL语句的更新表、更新条件及所述主键字段,获取全量数据作为所述待更新数据。
步骤S40:基于所述SQL语句对应的操作类型对所述待更新数据执行更新操作,得到所述待更新数据对应的更新后的数据,将所述更新后的数据反馈至所述客户端。
在本实施例中,基于SQL语句对应的操作类型对待更新数据执行更新操作,得到待更新数据对应的更新后的数据,将更新后的数据反馈至客户端。
其中,当所述SQL语句对应的操作类型为***操作(insert)时,所述更新后的数据为所述更新字段的值;
当所述SQL语句对应的操作类型为更新操作(update)时,所述更新后的数据为所述更新字段的值;
当所述SQL语句对应的操作类型为删除操作(delete)时,所述更新后的数据为空(null)。
进一步的,当所述待更新数据执行更新操作时生成该更新操作的时间戳;将所述SQL语句对应的操作类型、所述待更新数据、所述更新后的数据及所述时间戳封装成预设类型的数据结构发送至消息队列服务器。
为了避免业务***与消息队列服务器之间长时间的网络堵塞,可以使用线程池专门发送审计结果到消息队列服务器,这样业务***就能快速响应用户请求,实现了审计操作几乎不会对原业务***的处理造成延迟。还可以使用recorder微服务专门从消息队列服务器获取审计消息,之后依次将审计结果写入数据库,可以实现了审计数据生成与记录的解耦。
此外,本发明实施例还提出一种计算机可读存储介质,该计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。所述计算机可读存储介质中包括基于SQL解析的数据更新程序10,所述基于SQL解析的数据更新程序10被处理器执行时实现如下操作:
接收步骤:接收客户端发出的数据更新的请求,获取所述请求中携带的SQL语句;
解析步骤:拦截所述请求,利用预设的状态机对所述SQL语句进行解析,基于解析结果构建所述SQL语句的语法树,从所述语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于所述JAVA类获取所述SQL语句对应的表名及操作类型;
获取步骤:从预设的配置文件中查找是否存在所述SQL语句对应的主键字段,若存在,则获取该主键字段,若不存在,则基于所述表名从预设数据库的元数据中获取所述SQL语句的主键字段,基于所述SQL语句对应的操作类型和所述主键字段获取所述请求对应的待更新数据;及
更新步骤:基于所述SQL语句对应的操作类型对所述待更新数据执行更新操作,得到所述待更新数据对应的更新后的数据,将所述更新后的数据反馈至所述客户端。
进一步地,所述计算机可用存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。
需要强调的是,为进一步保证上述待更新数据的私密和安全性,上述待更新数据还可以存储于一区块链的节点中。本发明之计算机可读存储介质的具体实施方式与上述基于SQL解析的数据更新方法的具体实施方式大致相同,在此不再赘述。
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,电子设备,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种基于SQL解析的数据更新方法,应用于电子设备,其特征在于,所述方法包括:
接收步骤:接收客户端发出的数据更新的请求,获取所述请求中携带的SQL语句;
解析步骤:拦截所述请求,利用预设的状态机对所述SQL语句进行解析,基于解析结果构建所述SQL语句的语法树,从所述语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于所述JAVA类获取所述SQL语句对应的表名及操作类型;
获取步骤:从预设的配置文件中查找是否存在所述SQL语句对应的主键字段,若存在,则获取该主键字段,若不存在,则基于所述表名从预设数据库的元数据中获取所述SQL语句的主键字段,基于所述SQL语句对应的操作类型和所述主键字段获取所述请求对应的待更新数据;及
更新步骤:基于所述SQL语句对应的操作类型对所述待更新数据执行更新操作,得到所述待更新数据对应的更新后的数据,将所述更新后的数据反馈至所述客户端。
2.如权利要求1所述的基于SQL解析的数据更新方法,其特征在于,所述解析步骤包括:
将所述状态机的状态设为初始状态,利用所述状态机去匹配所述SQL语句的操作类型,将匹配到的操作类型作为所述语法树的根节点;
利用所述状态机根据第一预设正则表达式匹配所述SQL语句的更新表,将匹配到的更新表作为所述语法树的子节点;
利用状态机根据第二预设正则表达式匹配所述SQL语句更新字段,将匹配到的更新字段作为所述语法树的子节点。
3.如权利要求1所述的基于SQL解析的数据更新方法,其特征在于,所述获取步骤包括:
当所述SQL语句对应的操作类型为***操作时,所述待更新数据为空;
当所述SQL语句对应的操作类型为更新操作时,根据所述SQL语句的更新表、更新字段及更新条件生成选择语句,基于所述主键字段及所述选择语句,获取更新字段的当前值作为所述待更新数据;
当所述SQL语句对应的操作类型为删除操作时,根据所述SQL语句的更新表、更新条件及所述主键字段,获取全量数据作为所述待更新数据。
4.如权利要求1所述的基于SQL解析的数据更新方法,其特征在于,所述更新步骤包括:
当所述SQL语句对应的操作类型为***操作时,所述更新后的数据为所述更新字段的值;
当所述SQL语句对应的操作类型为更新操作时,所述更新后的数据为所述更新字段的值;
当所述SQL语句对应的操作类型为删除操作时,所述更新后的数据为空。
5.如权利要求1至4任意一项所述的基于SQL解析的数据更新方法,其特征在于,所述待更新数据存储于区块链中,所述方法还包括:
当所述待更新数据执行更新操作时生成该更新操作的时间戳;
将所述SQL语句对应的操作类型、所述待更新数据、所述更新后的数据及所述时间戳封装成预设类型的数据结构发送至消息队列服务器。
6.一种基于SQL解析的数据更新装置,其特征在于,所述装置包括:
接收模块:用于接收客户端发出的数据更新的请求,获取所述请求中携带的SQL语句;
解析模块:用于拦截所述请求,利用预设的状态机对所述SQL语句进行解析,基于解析结果构建所述SQL语句的语法树,从所述语法树中获取所述SQL语句的更新表、更新字段及更新条件并封装成JAVA类,基于所述JAVA类获取所述SQL语句对应的表名及操作类型;
获取模块:用于从预设的配置文件中查找是否存在所述SQL语句对应的主键字段,若存在,则获取该主键字段,若不存在,则基于所述表名从预设数据库的元数据中获取所述SQL语句的主键字段,基于所述SQL语句对应的操作类型和所述主键字段获取所述请求对应的待更新数据;及
更新模块:用于基于所述SQL语句对应的操作类型对所述待更新数据执行更新操作,得到所述待更新数据对应的更新后的数据,将所述更新后的数据反馈至所述客户端。
7.如权利要求6所述的基于SQL解析的数据更新装置,其特征在于,所述解析模块包括:
将所述状态机的状态设为初始状态,利用所述状态机去匹配所述SQL语句的操作类型,将匹配到的操作类型作为所述语法树的根节点;
利用所述状态机根据第一预设正则表达式匹配所述SQL语句的更新表,将匹配到的更新表作为所述语法树的子节点;
利用状态机根据第二预设正则表达式匹配所述SQL语句更新字段,将匹配到的更新字段作为所述语法树的子节点。
8.如权利要求6所述的基于SQL解析的数据更新装置,其特征在于,所述获取模块包括:
当所述SQL语句对应的操作类型为***操作时,所述待更新数据为空;
当所述SQL语句对应的操作类型为更新操作时,根据所述SQL语句的更新表、更新字段及更新条件生成选择语句,基于所述主键字段及所述选择语句,获取更新字段的当前值作为所述待更新数据;
当所述SQL语句对应的操作类型为删除操作时,根据所述SQL语句的更新表、更新条件及所述主键字段,获取全量数据作为所述待更新数据。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至5中任一所述的基于SQL解析的数据更新方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括存储数据区和存储程序区,存储数据区存储根据区块链节点的使用所创建的数据,存储程序区存储有基于SQL解析的数据更新程序,所述基于SQL解析的数据更新程序被处理器执行时,实现如权利要求1至5中任一项所述基于SQL解析的数据更新方法的步骤。
CN202010477746.7A 2020-05-29 基于sql解析的数据更新方法、装置、电子设备及存储介质 Active CN111651468B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010477746.7A CN111651468B (zh) 2020-05-29 基于sql解析的数据更新方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010477746.7A CN111651468B (zh) 2020-05-29 基于sql解析的数据更新方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN111651468A true CN111651468A (zh) 2020-09-11
CN111651468B CN111651468B (zh) 2024-07-02

Family

ID=

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112560100A (zh) * 2020-12-22 2021-03-26 网易(杭州)网络有限公司 数据脱敏方法及装置、计算机可读存储介质、电子设备
CN113254470A (zh) * 2021-05-28 2021-08-13 武汉悦学帮网络技术有限公司 一种数据更改方法、装置、计算机设备及存储介质
CN113821819A (zh) * 2021-11-22 2021-12-21 深圳竹云科技有限公司 数据读写方法、装置、电子设备及计算机可读存储介质
CN114116750A (zh) * 2021-11-29 2022-03-01 深圳壹账通智能科技有限公司 数据更新方法、装置、终端设备及存储介质
CN114168942A (zh) * 2021-12-06 2022-03-11 北京天融信网络安全技术有限公司 语句提取方法、装置、电子设备和计算机可读存储介质
CN114969203A (zh) * 2022-05-11 2022-08-30 深圳无一科技有限公司 数据实时同步方法、装置、设备及介质
CN115062049A (zh) * 2022-07-28 2022-09-16 浙江城云数字科技有限公司 一种数据血缘分析方法及装置
CN117349332A (zh) * 2023-12-06 2024-01-05 宁波港信息通信有限公司 一种应用程序编程接口api的生成方法、装置和电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107292170A (zh) * 2016-04-05 2017-10-24 阿里巴巴集团控股有限公司 Sql注入攻击的检测方法及装置、***
US20180096001A1 (en) * 2016-09-15 2018-04-05 Gb Gas Holdings Limited System for importing data into a data repository
CN108710662A (zh) * 2018-05-14 2018-10-26 上海跬智信息技术有限公司 语言转换方法和装置、存储介质、数据查询***和方法
CN110555030A (zh) * 2018-03-28 2019-12-10 北京京东尚科信息技术有限公司 一种sql语句的处理方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107292170A (zh) * 2016-04-05 2017-10-24 阿里巴巴集团控股有限公司 Sql注入攻击的检测方法及装置、***
US20180096001A1 (en) * 2016-09-15 2018-04-05 Gb Gas Holdings Limited System for importing data into a data repository
CN110555030A (zh) * 2018-03-28 2019-12-10 北京京东尚科信息技术有限公司 一种sql语句的处理方法和装置
CN108710662A (zh) * 2018-05-14 2018-10-26 上海跬智信息技术有限公司 语言转换方法和装置、存储介质、数据查询***和方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112560100A (zh) * 2020-12-22 2021-03-26 网易(杭州)网络有限公司 数据脱敏方法及装置、计算机可读存储介质、电子设备
CN112560100B (zh) * 2020-12-22 2023-09-26 网易(杭州)网络有限公司 数据脱敏方法及装置、计算机可读存储介质、电子设备
CN113254470A (zh) * 2021-05-28 2021-08-13 武汉悦学帮网络技术有限公司 一种数据更改方法、装置、计算机设备及存储介质
CN113821819A (zh) * 2021-11-22 2021-12-21 深圳竹云科技有限公司 数据读写方法、装置、电子设备及计算机可读存储介质
CN113821819B (zh) * 2021-11-22 2022-03-08 深圳竹云科技有限公司 数据读写方法、装置、电子设备及计算机可读存储介质
CN114116750A (zh) * 2021-11-29 2022-03-01 深圳壹账通智能科技有限公司 数据更新方法、装置、终端设备及存储介质
CN114168942A (zh) * 2021-12-06 2022-03-11 北京天融信网络安全技术有限公司 语句提取方法、装置、电子设备和计算机可读存储介质
CN114969203A (zh) * 2022-05-11 2022-08-30 深圳无一科技有限公司 数据实时同步方法、装置、设备及介质
CN115062049A (zh) * 2022-07-28 2022-09-16 浙江城云数字科技有限公司 一种数据血缘分析方法及装置
CN117349332A (zh) * 2023-12-06 2024-01-05 宁波港信息通信有限公司 一种应用程序编程接口api的生成方法、装置和电子设备
CN117349332B (zh) * 2023-12-06 2024-03-01 宁波港信息通信有限公司 一种应用程序编程接口api的生成方法、装置和电子设备

Similar Documents

Publication Publication Date Title
CN111414407A (zh) 数据库的数据查询方法、装置、计算机设备及存储介质
CN107506256B (zh) 一种崩溃数据监控的方法和装置
WO2019134339A1 (zh) 脱敏方法、程序、应用服务器及计算机可读存储介质
CN106406844B (zh) 实现通讯交互平台公众号菜单的方法和装置
CN110209766B (zh) 数据展示方法、电子装置及存储介质
CN112559354A (zh) 前端代码规范检测方法、装置、计算机设备及存储介质
CN111625782B (zh) 源码的访问权限控制方法、装置、计算机设备和存储介质
CN115150261B (zh) 告警分析的方法、装置、电子设备及存储介质
CN111400170B (zh) 一种数据权限测试方法及装置
US20160019266A1 (en) Query generating method and query generating device
CN110941779A (zh) 加载页面的方法、装置、存储介质及电子设备
CN111694613A (zh) 应用程序模块间的解耦方法、电子装置及存储介质
CN112784112A (zh) 报文校验方法及装置
CN107391528B (zh) 前端组件依赖信息搜索方法及设备
CN111723077A (zh) 数据字典维护方法、装置及计算机设备
CN113282591B (zh) 权限过滤方法、装置、计算机设备及存储介质
CN113434582B (zh) 业务数据处理方法、装置、计算机设备和存储介质
CN112765102B (zh) 一种文件***管理方法和装置
CN112671878A (zh) 一种区块链的信息订阅方法、装置、服务器和存储介质
CN112083925A (zh) 基于h5页面开发的数据获取方法、装置、设备及存储介质
RU2677563C2 (ru) Способ, терминал и сервер для отображения информации
CN111651468B (zh) 基于sql解析的数据更新方法、装置、电子设备及存储介质
CN110727576A (zh) 一种web页面测试方法、装置、设备及存储介质
CN111651468A (zh) 基于sql解析的数据更新方法、装置、电子设备及存储介质
CN112835901A (zh) 文件存储方法及装置、计算机设备、计算机可读存储介质

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