CN110795101A - Sql代码信息显示方法、装置、计算机装置及存储介质 - Google Patents
Sql代码信息显示方法、装置、计算机装置及存储介质 Download PDFInfo
- Publication number
- CN110795101A CN110795101A CN201910882079.8A CN201910882079A CN110795101A CN 110795101 A CN110795101 A CN 110795101A CN 201910882079 A CN201910882079 A CN 201910882079A CN 110795101 A CN110795101 A CN 110795101A
- Authority
- CN
- China
- Prior art keywords
- sql
- code
- preset keyword
- keyword
- preset
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 60
- 230000002085 persistent effect Effects 0.000 claims description 42
- 238000004590 computer program Methods 0.000 claims description 22
- 238000001514 detection method Methods 0.000 claims description 6
- 230000006870 function Effects 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 230000006399 behavior Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 239000003086 colorant Substances 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 238000013139 quantization Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/338—Presentation of query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/38—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
- G06F16/383—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually using metadata automatically derived from the content
-
- 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
- G06F8/436—Semantic checking
-
- 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)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种SQL代码信息显示方法、装置、计算机装置及存储介质。所述方法包括:获取SQL代码;检测所述SQL代码是否正确;若所述SQL代码正确并接收到在所述SQL代码中指定目标代码的操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。本发明提升了软件开发效率。
Description
技术领域
本发明涉及软件开发技术领域,具体涉及一种SQL代码信息显示方法、装置、计算机装置及计算机存储介质。
背景技术
在软件开发过程中,开发人员需要分析SQL代码的执行过程。但由于SQL代码中SQL字段、SQL字段所在的表较多,导致SQL代码理解起来有一定难度。此外,SQL参数、SQL变量、SQL游标在SQL代码中的不同位置交替出现,增加了SQL代码的理解难度。实际应用场景中,需要一个通过显示SQL代码的相关信息帮助用户理解、分析SQL代码的方法,以提升软件开发效率。
发明内容
鉴于以上内容,有必要提出一种SQL代码信息显示方法、装置、计算机装置及计算机存储介质,其可以显示SQL代码的相关信息,方便用户理解SQL代码的执行过程,提升软件开发效率。
本申请的第一方面提供一种SQL代码信息显示方法,所述方法包括:
获取SQL代码;
检测所述SQL代码的语法、语义、入参方式是否正确;
若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;
根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;
若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;
若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。
另一种可能的实现方式中,检测所述SQL代码的语法是否正确包括:
对于所述SQL代码中的每条SQL语句,识别所述SQL语句中所有的关键字;
将所述关键字按照出现顺序组合,得到所述SQL语句的关键字组合;
判断所述关键字组合与按照SQL语法规则定义的第一预设关键字组合是否匹配。
另一种可能的实现方式中,检测所述SQL代码的语义是否正确包括:
根据所述数据库的配置信息连接所述数据库;
获取所述数据库中的数据库表或所述数据库表中的数据列;
判断所述SQL代码中的SQL字段是否包含在所述数据库表或所述数据列中。
另一种可能的实现方式中,检测所述SQL代码的入参方式是否正确包括:
识别所述SQL代码中的占位符;
判断所述SQL代码中的占位符与所述SQL代码对应的持久层框架对应的预设占位符是否一致。
另一种可能的实现方式中,所述检测所述SQL代码的入参方式是否正确还包括:
若所述SQL代码中的占位符与所述持久层框架对应的预设占位符一致,判断所述SQL代码中的占位符的位置与所述持久层框架对应的预设占位符的位置是否一致。
另一种可能的实现方式中,所述根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标包括:
判断所述第一预设关键字与所述第二预设关键字的关键字组合是否与按照SQL语法规则定义的第二预设关键字组合相匹配;
若所述第一预设关键字与所述第二预设关键字的关键字组合与所述第二预设关键字组合相匹配,则根据所述第一预设关键字与所述第二预设关键字的关键字组合的类型判断所述SQL代码中所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;
若所述第一预设关键字与所述第二预设关键字的关键字组合与所述第二预设关键字组合不匹配,则根据所述第一预设关键字的类型判断所述SQL代码中所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标。
另一种可能的实现方式中,所述方法还包括:
若所述SQL代码的语法正确,检测所述SQL代码中是否包含预警关键字;
若所述SQL代码中包含所述预警关键字,则进行报警。
本申请的第二方面提供一种SQL代码信息显示装置,所述装置包括:
获取模块,用于获取SQL代码;
检测模块,用于检测所述SQL代码的语法、语义、入参方式是否正确;
检索模块,用于若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;
判断模块,用于根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;
第一显示模块,用于若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;
第二显示模块,用于若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。
本申请的第三方面提供一种计算机装置,所述计算机装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现所述SQL代码信息显示方法。
本申请的第四方面提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述SQL代码信息显示方法。
本发明获取SQL代码;检测所述SQL代码的语法、语义、入参方式是否正确;若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。本发明可以显示SQL代码的相关信息,方便用户理解SQL代码的执行过程,提升软件开发效率。
附图说明
图1是本发明实施例提供的SQL代码信息显示方法的流程图。
图2是本发明实施例提供的SQL代码信息显示装置的结构图。
图3是本发明实施例提供的计算机装置的示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
优选地,本发明的SQL代码信息显示方法应用在一个或者多个计算机装置中。所述计算机装置是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机装置可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机装置可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
实施例一
图1是本发明实施例一提供的SQL代码信息显示方法的流程图。所述SQL代码信息显示方法应用于计算机装置,用于显示SQL代码的相关信息,以方便用户理解SQL代码的执行过程。
如图1所示,所述SQL代码信息显示方法包括:
101,获取SQL代码。
可以从计算机装置的存储器中获取预先存储的所述SQL代码。或者,可以从网络中下载所述SQL代码。或者,可以接收用户输入的所述SQL代码。
在一具体实施例中,可以获取语音信息,将所述语音信息转换为所述SQL代码。例如,可以通过麦克风采集用户输入的语音信息,对用户输入的语音信息进行识别,得到所述SQL代码。可以采用各种语音识别技术,例如动态时间规整(Dynamic Time Warping,DTW)、隐马尔可夫模型(Hidden Markov Model,HMM)、矢量量化(Vector Quantization,VQ)、人工神经网络(Artificial Neural Network,ANN)等技术对所述语音信息进行识别。
可以在所述计算机装置的屏幕上显示所述SQL代码。
所述SQL代码包含多个SQL代码行。
所述SQL代码可以包括SQL块、SQL方法、SQL存储过程。所述SQL块、SQL方法、SQL存储过程可以包括SQL字段、SQL参数、SQL变量、SQL游标。
所述SQL字段表示所述SQL代码对应的数据库中的数据库表或所述数据库表中的数据列,可以根据所述SQL字段从所述数据库中查询所述数据库表或数据列。所述SQL代码对应的数据库就是所述SQL代码操作/访问的数据库。
所述SQL块、SQL方法、SQL存储过程通过对所述SQL参数中的输入参数进行处理,得到所述SQL参数中的输出参数。
所述SQL游标是一种控制结构,用于指向并选择查询结果集中的数据行。可以使用SQL游标以每次一行的方式来读取并处理查询结果集。
102,检测所述SQL代码的语法、语义、入参方式是否正确。
检测所述SQL代码的语法是否正确也就是检测所述SQL代码的语法是否符合SQL语法规则。
具体地,检测所述SQL代码的语法是否正确包括:对于所述SQL代码中的每条SQL语句,识别所述SQL语句中所有的关键字;将所述关键字按照出现顺序组合,得到所述SQL语句的关键字组合;判断所述SQL语句的关键字组合与按照SQL语法规则定义的第一预设关键字组合是否匹配。若所述SQL语句的关键字组合与所述第一预设关键字组合相匹配,则所述SQL语句的语法正确;否则,若所述SQL语句的关键字组合与所述第一预设关键字组合不匹配,则所述SQL语句的语法不正确。若所述SQL代码中的每条SQL语句的语法正确,则所述SQL代码的语法正确。否则,若SQL代码中的任意一条SQL语句的语法不正确,则所述SQL代码的语法不正确。举例来说,所述SQL代码为“select loan.appl_no,loan.loan_no,loan.cust_id from l_loan_mas loan,l_loan_id_mas loanid where loan.appl_no=loanid.appl_no and loan.appl_no=’000100119540’”,所述SQL代码的关键字组合为“select-from-where”,与第一预设关键字组合“select-from-where”相匹配,因此所述SQL语句的语法正确。
作为一种可选的实施方式,若检测到所述SQL代码的语法正确,可以检测所述SQL代码中是否包含预警关键字。若所述SQL代码中包含所述预警关键字,则进行报警。所述预警关键字用于执行存在一定风险的数据库操作,检测所述SQL代码中是否包含预警关键字并在检测到所述预警关键字时进行报警,可以提高数据库操作的安全性。举例来说,所述预警关键字可以包括“select*”、“drop”、“truncate”等。执行包含预警关键字“select*”的SQL代码,可能会因为查询量过大导致内存被占用、系统运行缓慢;执行包含预警关键字“drop”的SQL代码,会删除整个数据库表、视图、索引等。
可以根据实际需要设置不同预警等级的预警关键字。例如,设置高预警等级的预警关键字,例如包括“select*”、“drop”、“truncate”;设置中预警等级的预警关键字,例如包括“select*”、“drop”;设置低预警等级的预警关键字,例如包括“drop”。
检测所述SQL代码的语义是否正确可以是根据所述SQL代码对应的数据库检测所述SQL代码的语义是否正确。
具体地,检测所述SQL代码的语义是否正确包括:根据所述数据库的配置信息(例如数据库地址、数据库用户名、数据库密码)连接所述数据库;获取所述数据库中的数据库表或所述数据库表中的数据列;判断所述SQL代码中的SQL字段是否包含在所述数据库表或所述数据列中。若所述SQL代码中的SQL字段包含在所述数据库表或所述数据列中,则所述SQL代码的语义正确。否则,若所述SQL代码中的SQL字段不包含在所述数据库表或所述数据列中,则所述SQL代码的语义不正确。例如,SQL代码“select loan_mas from l_loan_maswhere loan_mas=’002’”中的SQL字段为“loan_mas”,查询到数据库表l_loan_mas中不存在SQL字段“loan_mas”,则所述SQL代码的语义不正确。
检测所述SQL代码的入参方式是否正确可以是根据所述SQL代码对应的持久层框架检测所述SQL代码的入参方式是否正确。
所述SQL代码对应的持久层框架就是所述SQL代码所在的持久层框架。
持久层框架是负责向(或者从)一个或者多个数据存储器中存储(或者获取)数据的一组类和组件。
所述持久层框架包括Mybatis、Hibernate或JDBC(Java DataBase Connectivity,Java数据库连接)。SQL代码对应的持久层框架不同,则SQL代码的入参方式不同。
具体地,检测所述SQL代码的入参方式是否正确:识别所述SQL代码中的占位符;判断所述SQL代码中的占位符与所述持久层框架对应的预设占位符是否一致。若所述SQL代码中的占位符与所述持久层框架对应的预设占位符一致,则所述SQL代码的入参方式正确;否则,若所述SQL代码中的占位符与所述持久层框架对应的预设占位符不一致,则所述SQL代码的入参方式不正确。
为了提高所述SQL代码的入参方式判断的准确性,若所述SQL代码中的占位符与所述持久层框架对应的预设占位符一致,可以进一步判断所述SQL代码中的占位符的位置与所述持久层框架对应的预设占位符的位置是否一致。若所述SQL代码中的占位符的位置与所述持久层框架对应的预设占位符的位置一致,则所述SQL代码的入参方式正确。否则,若所述SQL代码中的占位符的位置与所述持久层框架对应的预设占位符的位置不一致,则所述SQL代码的入参方式不正确。
若所述持久层框架为JDBC,其对应的预设占位符为“?”,其对应的预设占位符的起始序号为1;若所述持久层框架为Hibernate,其对应的预设占位符为“:value”或“?”,其对应的预设占位符的起始序号为0;若所述持久层框架为Mybatis,其对应的预设占位符为“#{value}”,其对应的预设占位符的位置由所述SQL代码的标签确定。
具体地,若所述SQL代码对应的持久层框架为JDBC,则判断所述SQL代码中的占位符是否为“?”;若所述SQL代码中的占位符为“?”,则判断所述SQL代码中的占位符的起始序号是否为1;若所述SQL代码中的占位符的起始序号为1,则所述SQL代码的入参方式不正确;否则,若所述SQL代码中的占位符不为“?”,或者所述SQL代码中的占位符的起始序号不为1,则所述SQL代码的入参方式不正确。
若所述SQL代码对应的持久层框架为Hibernate,则判断所述SQL代码中的占位符是否为“:value”或“?”;若所述SQL代码中的占位符为“:value”或“?”,则判断所述SQL代码中的占位符的起始序号是否为0;若所述SQL代码中的占位符的起始序号为0,则所述SQL代码的入参方式正确;否则,若所述SQL代码中的占位符不为“:value”或“?”,或者所述SQL代码中的占位符的起始序号不为0,则所述SQL代码的入参方式不正确。
若所述SQL代码对应的持久层框架为Mybatis,则判断所述SQL代码中的占位符是否为“#{value}”;若所述SQL代码中的占位符为“#{value}””,则判断所述SQL代码中的占位符的位置是否由所述SQL代码的标签确定;若所述SQL代码中的占位符的位置由所述SQL代码的标签确定,则所述SQL代码的入参方式正确;否则,若所述SQL代码中的占位符不为“:value”或“?”,或者所述SQL代码中的占位符的位置不是由所述SQL代码的标签确定,则所述SQL代码的入参方式不正确。
在一具体实施例中,若所述SQL代码的语法、语义或入参方式不正确,则发出SQL代码错误提示。
103,若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字。
可以检测用户对所述SQL代码的操作得到所述操作指令,根据所述操作指令得到所述目标代码。例如,当用户选中(例如点击)所述SQL代码中的某个代码(例如某个关键字)时检测到所述操作指令,将该代码作为所述目标代码。可以理解,用户可以通过鼠标、数位笔、触摸屏/触摸板等定点设备发出所述操作指令。
所述第一预设关键字与所述第二预设关键字是预设关键字库中的关键字。
在本实施例中,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字时,判断所述SQL代码的声明部分是否包含所述目标代码。所述声明部分的作用是声明SQL代码用到的变量、参数及游标,以及局部的存储过程和函数。若所述SQL代码的声明部分包含所述目标代码,则从所述SQL代码的声明部分检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字。否则,若所述SQL代码的声明部分不包含所述目标代码,则从所述SQL代码的非声明部分检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字。所述第一预设关键字是所述目标代码之前距离所述目标代码最近的所述预设关键字库中的关键字。所述第二预设关键字是所述目标代码之后距离所述目标代码最近的所述预设关键字库中的关键字。
所述预设关键字库可以包括“CREATE”、“REPLACE”、“FUNCTION”、“PROCEDURE”、“in”、“out”、“declare”、“begin”、“cursor”、“if”、“then”、“else”、“for”、“case”、“when”、“exit when”、“while”、“goto”、“loop”、“end if”、“end loop”“end”“elseif”、“exception”、“select”、“from”、“where”、“insert into”、“delete from”、“update”、“values”、“exception”等关键字。所述预设关键字库中的关键字可以作为SQL代码中内容判断、SQL代码中语句结构划分、SQL代码中语句之间结构划分的依据。
104,根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标。
在本实施例中,可以判断所述第一预设关键字与所述第二预设关键字的关键字组合是否与按照SQL语法规则定义的第二预设关键字组合相匹配;若所述第一预设关键字与所述第二预设关键字的关键字组合与第二预设关键字组合相匹配,则根据所述第一预设关键字与所述第二预设关键字的关键字组合的类型判断所述SQL代码中所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标。否则,若所述第一预设关键字与所述第二预设关键字的关键字组合与第二预设关键字组合不匹配,则根据所述第一预设关键字的类型判断所述SQL代码中所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标。所述关键字组合由所述第一预设关键字和所述第二预设关键字进行组合得到。例如,所述第一关键字为select,所述第二关键字为from,则所述关键字组合为select-from。若所述第一预设关键字与所述第二预设关键字组合中的第一个关键字一致且所述第二预设关键字与所述第二预设关键字组合中的第二个关键字一致,则所述第一预设关键字与所述第二预设关键字的关键字组合与第二预设关键字组合相匹配;若所述第一预设关键字与所述第二预设关键字组合中的第一个关键字不一致或所述第二预设关键字与所述第二预设关键字组合中的第二个关键字不一致,则所述第一预设关键字与所述第二预设关键字的关键字组合与第二预设关键字组合不匹配。
所述第一预设关键字或所述关键字组合的类型可以包括:SQL字段关键字、SQL参数关键字、SQL变量关键字、SQL游标关键字。
若所述第一预设关键字或所述关键字组合为SQL字段关键字,则所述目标代码为SQL字段。所述SQL字段关键字可以包括“select”、“select-from”(select为第一预设关键字,from为第二预设关键字)、“from”、“from-where”(from为第一预设关键字,where为第二预设关键字)等。
若所述第一预设关键字或所述关键字组合为SQL参数关键字,则所述目标代码为SQL参数。所述SQL参数关键字可以包括“FUNCTION-in”(FUNCTION为第一预设关键字,in为第二预设关键字)、“in-out”(in为第一预设关键字,out为第二预设关键字)等。
若所述第一预设关键字或所述关键字组合为SQL变量关键字,则所述目标代码为SQL变量。所述SQL变量关键字可以包括“declare-int”(declare为第一预设关键字,int为第二预设关键字)、“declare-Intger”(declare为第一预设关键字,Intger为第二预设关键字)等。
若所述第一预设关键字或所述关键字组合为SQL游标关键字,则所述目标代码为SQL游标。所述SQL游标关键字可以包括“cursor”、“cursor-is”(cursor为第一标预设识符,is为第二预设关键字)等。
105,若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息。
若所述目标代码为SQL字段,可以通过JDBC技术从所述数据库中查询所述目标代码的SQL字段信息。可以通过HTML(HyperText Markup Language,超文本标记语言)或Swing工具显示所述SQL字段信息。在一具体实施例中,可以获取所述目标代码的显示位置,根据所述目标代码的显示位置显示所述SQL字段信息(例如,在所述目标代码的显示位置的上方显示所述SQL字段信息)。
所述SQL字段信息包括SQL字段所在的数据表、SQL字段类型、SQL字段描述。
在一具体实施例中,所述目标代码是“n.appl_no”,所述SQL字段信息为“appl_no:表1_loan_mas字段类型:varchar(36)描述:申请号”,其中“l_loan_mas”为所述SQL字段所在的数据表,“varchar(36)”为SQL字段类型、“申请号”为SQL字段描述。
显示所述SQL字段信息可以方便用户了解所述目标代码(SQL字段)的具体信息,提升软件开发效率。
106,若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。
可以在所述SQL代码的全部代码中检索包含所述目标代码的SQL代码行。或者,可以在所述SQL代码的部分代码(如指定检索范围)中检索包含所述目标代码的SQL代码行。所述SQL代码行中的每个代码行都包含所述目标代码。
若所述目标代码为SQL参数,则在所述SQL代码中检索包含所述SQL参数的SQL代码行。在本实施例中,若所述目标代码为SQL参数,则根据所述第二预设关键字确定所述SQL参数的参数类型,并标注所述SQL参数的参数类型(例如用不同的颜色标注)。所述参数类型包括输入参数和输出参数。例如,所述目标代码为SQL参数“v_limit”,所述SQL参数“v_limit”的参数类型为输入参数,检索到的包含所述SQL参数“v_limit”的SQL代码行为“select id,name from t_a where rownum>v_limit”。
若所述目标代码为SQL变量,则在所述SQL代码中检索包含所述SQL变量的SQL代码行。例如,所述目标代码为SQL变量“v_count”,检索到的包含所述SQL变量“v_count”的SQL代码行为“v_count int”、“select count(*)into v_count from t_b”、“v_count<=v_limit”。
若所述目标代码为SQL游标,则在所述SQL代码中检索包含所述SQL游标的SQL代码行。例如,所述目标代码为SQL游标“t_a_cursor”,检索到的包含所述SQL游标“t_a_cursor”的SQL代码行为“cursor t_a_cursor is select id,name from t_a where rownum>v_limit”、“FOR v_t_a_insert IN t_a_cursor LOOP”。
显示所有包含所述目标代码的SQL代码行可以便于用户了解所述目标代码(SQL参数、SQL变量或SQL游标)的处理逻辑,提升软件开发效率。
实施例一的SQL代码信息显示方法获取SQL代码;检测所述SQL代码的语法、语义、入参方式是否正确;若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。实施例一的SQL代码信息显示方法通过显示SQL代码的相关信息,加快用户对SQL代码执行过程的理解,提升软件开发效率。
实施例二
图2是本发明实施例二提供的SQL代码信息显示装置的结构图。所述SQL代码信息显示装置20应用于计算机装置。本装置的SQL代码信息显示是显示SQL代码的相关信息。所述SQL代码信息显示装置20可以提升软件开发效率。如图2所示,所述SQL代码信息显示装置20可以包括获取模块201、检测模块202、检索模块203、判断模块204、第一显示模块205、第二显示模块206。
获取模块201,用于获取SQL代码。
可以从计算机装置的存储器中获取预先存储的所述SQL代码。或者,可以从网络中下载所述SQL代码。或者,可以接收用户输入的所述SQL代码。
在一具体实施例中,可以获取语音信息,将所述语音信息转换为所述SQL代码。例如,可以通过麦克风采集用户输入的语音信息,对用户输入的语音信息进行识别,得到所述SQL代码。可以采用各种语音识别技术,例如动态时间规整(Dynamic Time Warping,DTW)、隐马尔可夫模型(Hidden Markov Model,HMM)、矢量量化(Vector Quantization,VQ)、人工神经网络(Artificial Neural Network,ANN)等技术对所述语音信息进行识别。
可以在所述计算机装置的屏幕上显示所述SQL代码。
所述SQL代码包含多个SQL代码行。
所述SQL代码可以包括SQL块、SQL方法、SQL存储过程。所述SQL块、SQL方法、SQL存储过程可以包括SQL字段、SQL参数、SQL变量、SQL游标。
所述SQL字段表示所述SQL代码对应的数据库中的数据库表或所述数据库表中的数据列,可以根据所述SQL字段从所述数据库中查询所述数据库表或数据列。所述SQL代码对应的数据库就是所述SQL代码操作/访问的数据库。
所述SQL块、SQL方法、SQL存储过程通过对所述SQL参数中的输入参数进行处理,得到所述SQL参数中的输出参数。
所述SQL游标是一种控制结构,用于指向并选择查询结果集中的数据行。可以使用SQL游标以每次一行的方式来读取并处理查询结果集。
检测模块202,用于检测所述SQL代码的语法、语义、入参方式是否正确。
检测所述SQL代码的语法是否正确也就是检测所述SQL代码的语法是否符合SQL语法规则。
具体地,检测所述SQL代码的语法是否正确包括:对于所述SQL代码中的每条SQL语句,识别所述SQL语句中所有的关键字;将所述关键字按照出现顺序组合,得到所述SQL语句的关键字组合;判断所述SQL语句的关键字组合与按照SQL语法规则定义的第一预设关键字组合是否匹配。若所述SQL语句的关键字组合与所述第一预设关键字组合相匹配,则所述SQL语句的语法正确;否则,若所述SQL语句的关键字组合与所述第一预设关键字组合不匹配,则所述SQL语句的语法不正确。若所述SQL代码中的每条SQL语句的语法正确,则所述SQL代码的语法正确。否则,若SQL代码中的任意一条SQL语句的语法不正确,则所述SQL代码的语法不正确。举例来说,所述SQL代码为“select loan.appl_no,loan.loan_no,loan.cust_id from l_loan_mas loan,l_loan_id_mas loanid where loan.appl_no=loanid.appl_no and loan.appl_no=’000100119540’”,所述SQL代码的关键字组合为“select-from-where”,与第一预设关键字组合“select-from-where”相匹配,因此所述SQL语句的语法正确。
作为一种可选的实施方式,若检测到所述SQL代码的语法正确,可以检测所述SQL代码中是否包含预警关键字。若所述SQL代码中包含所述预警关键字,则进行报警。所述预警关键字用于执行存在一定风险的数据库操作,检测所述SQL代码中是否包含预警关键字并在检测到所述预警关键字时进行报警,可以提高数据库操作的安全性。举例来说,所述预警关键字可以包括“select*”、“drop”、“truncate”等。执行包含预警关键字“select*”的SQL代码,可能会因为查询量过大导致内存被占用、系统运行缓慢;执行包含预警关键字“drop”的SQL代码,会删除整个数据库表、视图、索引等。
可以根据实际需要设置不同预警等级的预警关键字。例如,设置高预警等级的预警关键字,例如包括“select*”、“drop”、“truncate”;设置中预警等级的预警关键字,例如包括“select*”、“drop”;设置低预警等级的预警关键字,例如包括“drop”。
检测所述SQL代码的语义是否正确可以是根据所述SQL代码对应的数据库检测所述SQL代码的语义是否正确。
具体地,检测所述SQL代码的语义是否正确包括:根据所述数据库的配置信息(例如数据库地址、数据库用户名、数据库密码)连接所述数据库;获取所述数据库中的数据库表或所述数据库表中的数据列;判断所述SQL代码中的SQL字段是否包含在所述数据库表或所述数据列中。若所述SQL代码中的SQL字段包含在所述数据库表或所述数据列中,则所述SQL代码的语义正确。否则,若所述SQL代码中的SQL字段不包含在所述数据库表或所述数据列中,则所述SQL代码的语义不正确。例如,SQL代码“select loan_mas from l_loan_maswhere loan_mas=’002’”中的SQL字段为“loan_mas”,查询到数据库表l_loan_mas中不存在SQL字段“loan_mas”,则所述SQL代码的语义不正确。
检测所述SQL代码的入参方式是否正确可以是根据所述SQL代码对应的持久层框架检测所述SQL代码的入参方式是否正确。
所述SQL代码对应的持久层框架就是所述SQL代码所在的持久层框架。
持久层框架是负责向(或者从)一个或者多个数据存储器中存储(或者获取)数据的一组类和组件。
所述持久层框架包括Mybatis、Hibernate或JDBC(Java DataBase Connectivity,Java数据库连接)。SQL代码对应的持久层框架不同,则SQL代码的入参方式不同。
具体地,检测所述SQL代码的入参方式是否正确:识别所述SQL代码中的占位符;判断所述SQL代码中的占位符与所述持久层框架对应的预设占位符是否一致。若所述SQL代码中的占位符与所述持久层框架对应的预设占位符一致,则所述SQL代码的入参方式正确;否则,若所述SQL代码中的占位符与所述持久层框架对应的预设占位符不一致,则所述SQL代码的入参方式不正确。
为了提高所述SQL代码的入参方式判断的准确性,若所述SQL代码中的占位符与所述持久层框架对应的预设占位符一致,可以进一步判断所述SQL代码中的占位符的位置与所述持久层框架对应的预设占位符的位置是否一致。若所述SQL代码中的占位符的位置与所述持久层框架对应的预设占位符的位置一致,则所述SQL代码的入参方式正确。否则,若所述SQL代码中的占位符的位置与所述持久层框架对应的预设占位符的位置不一致,则所述SQL代码的入参方式不正确。
若所述持久层框架为JDBC,其对应的预设占位符为“?”,其对应的预设占位符的起始序号为1;若所述持久层框架为Hibernate,其对应的预设占位符为“:value”或“?”,其对应的预设占位符的起始序号为0;若所述持久层框架为Mybatis,其对应的预设占位符为“#{value}”,其对应的预设占位符的位置由所述SQL代码的标签确定。
具体地,若所述SQL代码对应的持久层框架为JDBC,则判断所述SQL代码中的占位符是否为“?”;若所述SQL代码中的占位符为“?”,则判断所述SQL代码中的占位符的起始序号是否为1;若所述SQL代码中的占位符的起始序号为1,则所述SQL代码的入参方式不正确;否则,若所述SQL代码中的占位符不为“?”,或者所述SQL代码中的占位符的起始序号不为1,则所述SQL代码的入参方式不正确。
若所述SQL代码对应的持久层框架为Hibernate,则判断所述SQL代码中的占位符是否为“:value”或“?”;若所述SQL代码中的占位符为“:value”或“?”,则判断所述SQL代码中的占位符的起始序号是否为0;若所述SQL代码中的占位符的起始序号为0,则所述SQL代码的入参方式正确;否则,若所述SQL代码中的占位符不为“:value”或“?”,或者所述SQL代码中的占位符的起始序号不为0,则所述SQL代码的入参方式不正确。
若所述SQL代码对应的持久层框架为Mybatis,则判断所述SQL代码中的占位符是否为“#{value}”;若所述SQL代码中的占位符为“#{value}””,则判断所述SQL代码中的占位符的位置是否由所述SQL代码的标签确定;若所述SQL代码中的占位符的位置由所述SQL代码的标签确定,则所述SQL代码的入参方式正确;否则,若所述SQL代码中的占位符不为“:value”或“?”,或者所述SQL代码中的占位符的位置不是由所述SQL代码的标签确定,则所述SQL代码的入参方式不正确。
在一具体实施例中,若所述SQL代码的语法、语义或入参方式不正确,则发出SQL代码错误提示。
检索模块203,用于若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字。
可以检测用户对所述SQL代码的操作得到所述操作指令,根据所述操作指令得到所述目标代码。例如,当用户选中(例如点击)所述SQL代码中的某个代码(例如某个关键字)时检测到所述操作指令,将该代码作为所述目标代码。可以理解,用户可以通过鼠标、数位笔、触摸屏/触摸板等定点设备发出所述操作指令。
所述第一预设关键字与所述第二预设关键字是预设关键字库中的关键字。
在本实施例中,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字时,判断所述SQL代码的声明部分是否包含所述目标代码。所述声明部分的作用是声明SQL代码用到的变量、参数及游标,以及局部的存储过程和函数。若所述SQL代码的声明部分包含所述目标代码,则从所述SQL代码的声明部分检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字。否则,若所述SQL代码的声明部分不包含所述目标代码,则从所述SQL代码的非声明部分检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字。所述第一预设关键字是所述目标代码之前距离所述目标代码最近的所述预设关键字库中的关键字。所述第二预设关键字是所述目标代码之后距离所述目标代码最近的所述预设关键字库中的关键字。
所述预设关键字库可以包括“CREATE”、“REPLACE”、“FUNCTION”、“PROCEDURE”、“in”、“out”、“declare”、“begin”、“cursor”、“if”、“then”、“else”、“for”、“case”、“when”、“exit when”、“while”、“goto”、“loop”、“end if”、“end loop”“end”“elseif”、“exception”、“select”、“from”、“where”、“insert into”、“delete from”、“update”、“values”、“exception”等关键字。所述预设关键字库中的关键字可以作为SQL代码中内容判断、SQL代码中语句结构划分、SQL代码中语句之间结构划分的依据。
判断模块204,用于根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标。
在本实施例中,可以判断所述第一预设关键字与所述第二预设关键字的关键字组合是否与按照SQL语法规则定义的第二预设关键字组合相匹配;若所述第一预设关键字与所述第二预设关键字的关键字组合与第二预设关键字组合相匹配,则根据所述第一预设关键字与所述第二预设关键字的关键字组合的类型判断所述SQL代码中所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标。否则,若所述第一预设关键字与所述第二预设关键字的关键字组合与第二预设关键字组合不匹配,则根据所述第一预设关键字的类型判断所述SQL代码中所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标。所述关键字组合由所述第一预设关键字和所述第二预设关键字进行组合得到。例如,所述第一关键字为select,所述第二关键字为from,则所述关键字组合为select-from。若所述第一预设关键字与所述第二预设关键字组合中的第一个关键字一致且所述第二预设关键字与所述第二预设关键字组合中的第二个关键字一致,则所述第一预设关键字与所述第二预设关键字的关键字组合与第二预设关键字组合相匹配;若所述第一预设关键字与所述第二预设关键字组合中的第一个关键字不一致或所述第二预设关键字与所述第二预设关键字组合中的第二个关键字不一致,则所述第一预设关键字与所述第二预设关键字的关键字组合与第二预设关键字组合不匹配。
所述第一预设关键字或所述关键字组合的类型可以包括:SQL字段关键字、SQL参数关键字、SQL变量关键字、SQL游标关键字。
若所述第一预设关键字或所述关键字组合为SQL字段关键字,则所述目标代码为SQL字段。所述SQL字段关键字可以包括“select”、“select-from”(select为第一预设关键字,from为第二预设关键字)、“from”、“from-where”(from为第一预设关键字,where为第二预设关键字)等。
若所述第一预设关键字或所述关键字组合为SQL参数关键字,则所述目标代码为SQL参数。所述SQL参数关键字可以包括“FUNCTION-in”(FUNCTION为第一预设关键字,in为第二预设关键字)、“in-out”(in为第一预设关键字,out为第二预设关键字)等。
若所述第一预设关键字或所述关键字组合为SQL变量关键字,则所述目标代码为SQL变量。所述SQL变量关键字可以包括“declare-int”(declare为第一预设关键字,int为第二预设关键字)、“declare-Intger”(declare为第一预设关键字,Intger为第二预设关键字)等。
若所述第一预设关键字或所述关键字组合为SQL游标关键字,则所述目标代码为SQL游标。所述SQL游标关键字可以包括“cursor”、“cursor-is”(cursor为第一标预设识符,is为第二预设关键字)等。
第一显示模块205,用于若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息。
若所述目标代码为SQL字段,可以通过JDBC技术从所述数据库中查询所述目标代码的SQL字段信息。可以通过HTML(HyperText Markup Language,超文本标记语言)或Swing工具显示所述SQL字段信息。在一具体实施例中,可以获取所述目标代码的显示位置,根据所述目标代码的显示位置显示所述SQL字段信息(例如,在所述目标代码的显示位置的上方显示所述SQL字段信息)。
所述SQL字段信息包括SQL字段所在的数据表、SQL字段类型、SQL字段描述。
在一具体实施例中,所述目标代码是“n.appl_no”,所述SQL字段信息为“appl_no:表l_loan_mas字段类型:varchar(36)描述:申请号”,其中“l_loan_mas”为所述SQL字段所在的数据表,“varchar(36)”为SQL字段类型、“申请号”为SQL字段描述。
显示所述SQL字段信息可以方便用户了解所述目标代码(SQL字段)的具体信息,提升软件开发效率。
第二显示模块206,用于若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。
可以在所述SQL代码的全部代码中检索包含所述目标代码的SQL代码行。或者,可以在所述SQL代码的部分代码(如指定检索范围)中检索包含所述目标代码的SQL代码行。所述SQL代码行中的每个代码行都包含所述目标代码。
若所述目标代码为SQL参数,则在所述SQL代码中检索包含所述SQL参数的SQL代码行。在本实施例中,若所述目标代码为SQL参数,则根据所述第二预设关键字确定所述SQL参数的参数类型,并标注所述SQL参数的参数类型(例如用不同的颜色标注)。所述参数类型包括输入参数和输出参数。例如,所述目标代码为SQL参数“v_limit”,所述SQL参数“v_limit”的参数类型为输入参数,检索到的包含所述SQL参数“v_limit”的SQL代码行为“select id,name from t_a where rownum>v_limit”。
若所述目标代码为SQL变量,则在所述SQL代码中检索包含所述SQL变量的SQL代码行。例如,所述目标代码为SQL变量“v_count”,检索到的包含所述SQL变量“v_count”的SQL代码行为“v_count int”、“select count(*)into v_count from t_b”、“v_count<=v_limit”。
若所述目标代码为SQL游标,则在所述SQL代码中检索包含所述SQL游标的SQL代码行。例如,所述目标代码为SQL游标“t_a_cursor”,检索到的包含所述SQL游标“t_a_cursor”的SQL代码行为“cursor t_a_cursor is select id,name from t_a where rownum>v_limit”、“FOR v_t_a_insert IN t_a_cursor LOOP”。
显示所有包含所述目标代码的SQL代码行可以便于用户了解所述目标代码(SQL参数、SQL变量或SQL游标)的处理逻辑,提升软件开发效率。
实施例二的SQL代码信息显示装置20获取SQL代码;检测所述SQL代码的语法、语义、入参方式是否正确;若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。实施例二通过显示SQL代码的相关信息,加快用户对SQL代码执行过程的理解,提升软件开发效率。
实施例三
本实施例提供一种计算机存储介质,该计算机存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述SQL代码信息显示方法实施例中的步骤,例如图1所示的101-106:
101,获取SQL代码;
102,检测所述SQL代码的语法、语义、入参方式是否正确;
103,若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;
104,根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;
105,若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;
106,若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。
或者,该计算机程序被处理器执行时实现上述装置实施例中各模块的功能,例如图2中的模块201-206:
获取模块201,用于获取SQL代码;
检测模块202,用于检测所述SQL代码的语法、语义、入参方式是否正确;
检索模块203,用于若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;
判断模块204,用于根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;
第一显示模块205,用于若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;
第二显示模块206,用于若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。
实施例四
图3为本发明实施例四提供的计算机装置的示意图。所述计算机装置30包括存储器301、处理器302以及存储在所述存储器301中并可在所述处理器302上运行的计算机程序303,例如SQL代码信息显示程序。所述处理器302执行所述计算机程序303时实现上述SQL代码信息显示方法实施例中的步骤,例如图1所示的101-106。或者,该计算机程序被处理器执行时实现上述装置实施例中各模块的功能,例如图2中的模块201-206。
示例性的,所述计算机程序303可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器301中,并由所述处理器302执行,以完成本方法。所述一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序303在所述计算机装置30中的执行过程。例如,所述计算机程序303可以被分割成图2中的获取模块201、检测模块202、检索模块203、判断模块204、第一显示模块205、第二显示模块206,各模块具体功能参见实施例二。
所述计算机装置30可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。本领域技术人员可以理解,所述示意图3仅仅是计算机装置30的示例,并不构成对计算机装置30的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述计算机装置30还可以包括输入输出设备、网络接入设备、总线等。
所称处理器302可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器302也可以是任何常规的处理器等,所述处理器302是所述计算机装置30的控制中心,利用各种接口和线路连接整个计算机装置30的各个部分。
所述存储器301可用于存储所述计算机程序303,所述处理器302通过运行或执行存储在所述存储器301内的计算机程序或模块,以及调用存储在存储器301内的数据,实现所述计算机装置30的各种功能。所述存储器301可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据计算机装置30的使用所创建的数据。此外,存储器301可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。
所述计算机装置30集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附关联图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他模块或步骤,单数不排除复数。系统权利要求中陈述的多个模块或装置也可以由一个模块或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
Claims (10)
1.一种SQL代码信息显示方法,其特征在于,所述方法包括:
获取SQL代码;
检测所述SQL代码的语法、语义、入参方式是否正确;
若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;
根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;
若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;
若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。
2.如权利要求1所述的方法,其特征在于,检测所述SQL代码的语法是否正确包括:
对于所述SQL代码中的每条SQL语句,识别所述SQL语句中所有的关键字;
将所述关键字按照出现顺序组合,得到所述SQL语句的关键字组合;
判断所述关键字组合与按照SQL语法规则定义的第一预设关键字组合是否匹配。
3.如权利要求1所述的方法,其特征在于,检测所述SQL代码的语义是否正确包括:
根据所述数据库的配置信息连接所述数据库;
获取所述数据库中的数据库表或所述数据库表中的数据列;
判断所述SQL代码中的SQL字段是否包含在所述数据库表或所述数据列中。
4.如权利要求1所述的方法,其特征在于,检测所述SQL代码的入参方式是否正确包括:
识别所述SQL代码中的占位符;
判断所述SQL代码中的占位符与所述SQL代码对应的持久层框架对应的预设占位符是否一致。
5.如权利要求4所述的方法,其特征在于,所述检测所述SQL代码的入参方式是否正确还包括:
若所述SQL代码中的占位符与所述持久层框架对应的预设占位符一致,判断所述SQL代码中的占位符的位置与所述持久层框架对应的预设占位符的位置是否一致。
6.如权利要求1所述的方法,其特征在于,所述根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标包括:
判断所述第一预设关键字与所述第二预设关键字的关键字组合是否与按照SQL语法规则定义的第二预设关键字组合相匹配;
若所述第一预设关键字与所述第二预设关键字的关键字组合与所述第二预设关键字组合相匹配,则根据所述第一预设关键字与所述第二预设关键字的关键字组合的类型判断所述SQL代码中所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;
若所述第一预设关键字与所述第二预设关键字的关键字组合与所述第二预设关键字组合不匹配,则根据所述第一预设关键字的类型判断所述SQL代码中所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标。
7.如权利要求1-6中任一项所述的方法,其特征在于,所述方法还包括:
若所述SQL代码的语法正确,检测所述SQL代码中是否包含预警关键字;
若所述SQL代码中包含所述预警关键字,则进行报警。
8.一种SQL代码信息显示装置,其特征在于,所述装置包括:
获取模块,用于获取SQL代码;
检测模块,用于检测所述SQL代码的语法、语义、入参方式是否正确;
检索模块,用于若所述SQL代码的语法、语义、入参方式正确,检测是否接收到从所述SQL代码中指定目标代码的操作指令,若接收到所述操作指令,在所述SQL代码中检索所述目标代码之前的第一预设关键字和所述目标代码之后的第二预设关键字;
判断模块,用于根据所述第一预设关键字和所述第二预设关键字判断所述目标代码是否为SQL字段、SQL参数、SQL变量或SQL游标;
第一显示模块,用于若所述目标代码为SQL字段,则在所述SQL代码对应的数据库中查询所述目标代码的SQL字段信息,显示所述SQL字段信息;
第二显示模块,用于若所述目标代码为SQL参数、SQL变量或SQL游标,则在所述SQL代码中检索包含所述目标代码的SQL代码行,显示所述SQL代码行。
9.一种计算机装置,其特征在于,所述计算机装置包括处理器,所述处理器用于执行存储器中存储的计算机程序以实现如权利要求1-7中任一项所述SQL代码信息显示方法。
10.一种计算机存储介质,所述计算机存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述SQL代码信息显示方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910882079.8A CN110795101B (zh) | 2019-09-18 | 2019-09-18 | Sql代码信息显示方法、装置、计算机装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910882079.8A CN110795101B (zh) | 2019-09-18 | 2019-09-18 | Sql代码信息显示方法、装置、计算机装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110795101A true CN110795101A (zh) | 2020-02-14 |
CN110795101B CN110795101B (zh) | 2024-01-30 |
Family
ID=69427279
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910882079.8A Active CN110795101B (zh) | 2019-09-18 | 2019-09-18 | Sql代码信息显示方法、装置、计算机装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110795101B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113672491A (zh) * | 2020-05-14 | 2021-11-19 | 深圳市华胜软件技术有限公司 | 检测sql语句合法性的方法、存储介质及终端设备 |
WO2022002275A1 (zh) * | 2020-07-03 | 2022-01-06 | 中兴通讯股份有限公司 | 分布式存储过程的运行方法、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104391995A (zh) * | 2014-12-15 | 2015-03-04 | 北京趣拿软件科技有限公司 | 一种sql语句审核的方法、数据库运维的方法及系统 |
CN104391923A (zh) * | 2014-11-20 | 2015-03-04 | 北京锐安科技有限公司 | 一种查询数据集的方法及装置 |
CN106095792A (zh) * | 2016-05-27 | 2016-11-09 | 中国银联股份有限公司 | 生成数据库操作代码的方法和装置 |
US20160342646A1 (en) * | 2015-05-20 | 2016-11-24 | International Business Machines Corporation | Database query cursor management |
CN106933845A (zh) * | 2015-12-30 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 使用sql实现mdx查询效果的方法和装置 |
US20180218031A1 (en) * | 2017-01-31 | 2018-08-02 | Salesforce.com. inc. | Systems, methods, and apparatuses for implementing dynamic macros within a multi-tenant aware structured query language |
CN109710631A (zh) * | 2018-08-17 | 2019-05-03 | 深圳壹账通智能科技有限公司 | 辅助生成sql代码的方法、装置、设备及计算机存储介质 |
CN110109981A (zh) * | 2019-04-04 | 2019-08-09 | 平安科技(深圳)有限公司 | 工作队列的信息展示方法、装置、计算机设备和存储介质 |
-
2019
- 2019-09-18 CN CN201910882079.8A patent/CN110795101B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104391923A (zh) * | 2014-11-20 | 2015-03-04 | 北京锐安科技有限公司 | 一种查询数据集的方法及装置 |
CN104391995A (zh) * | 2014-12-15 | 2015-03-04 | 北京趣拿软件科技有限公司 | 一种sql语句审核的方法、数据库运维的方法及系统 |
US20160342646A1 (en) * | 2015-05-20 | 2016-11-24 | International Business Machines Corporation | Database query cursor management |
CN106933845A (zh) * | 2015-12-30 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 使用sql实现mdx查询效果的方法和装置 |
CN106095792A (zh) * | 2016-05-27 | 2016-11-09 | 中国银联股份有限公司 | 生成数据库操作代码的方法和装置 |
US20180218031A1 (en) * | 2017-01-31 | 2018-08-02 | Salesforce.com. inc. | Systems, methods, and apparatuses for implementing dynamic macros within a multi-tenant aware structured query language |
CN109710631A (zh) * | 2018-08-17 | 2019-05-03 | 深圳壹账通智能科技有限公司 | 辅助生成sql代码的方法、装置、设备及计算机存储介质 |
CN110109981A (zh) * | 2019-04-04 | 2019-08-09 | 平安科技(深圳)有限公司 | 工作队列的信息展示方法、装置、计算机设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
梁敬彬;: "探讨动态SQL扩展的应用", 福建电脑, no. 03 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113672491A (zh) * | 2020-05-14 | 2021-11-19 | 深圳市华胜软件技术有限公司 | 检测sql语句合法性的方法、存储介质及终端设备 |
WO2022002275A1 (zh) * | 2020-07-03 | 2022-01-06 | 中兴通讯股份有限公司 | 分布式存储过程的运行方法、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110795101B (zh) | 2024-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5864819A (en) | Internal window object tree method for representing graphical user interface applications for speech navigation | |
CN109409533B (zh) | 一种机器学习模型的生成方法、装置、设备及存储介质 | |
US10127264B1 (en) | Techniques for automated data analysis | |
WO2019169858A1 (zh) | 一种基于搜索引擎技术的数据分析方法及系统 | |
US8386238B2 (en) | Systems and methods for evaluating a sequence of characters | |
JP2005537532A (ja) | 自然言語理解アプリケーションを構築するための総合開発ツール | |
JPH08241193A (ja) | コード・セグメント解析方法。 | |
CN110502227A (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
CN111553556A (zh) | 业务数据分析方法、装置、计算机设备及存储介质 | |
CN110795101B (zh) | Sql代码信息显示方法、装置、计算机装置及存储介质 | |
CN117332823B (zh) | 目标内容自动生成方法、装置、电子设备及可读存储介质 | |
CN110659063A (zh) | 软件项目重构方法、装置、计算机装置及存储介质 | |
CN108959454B (zh) | 一种提示子句指定方法、装置、设备及存储介质 | |
CN114490986B (zh) | 计算机实施的数据挖掘方法、装置、电子设备及存储介质 | |
CN114676155A (zh) | 代码提示信息的确定方法、数据集的确定方法及电子设备 | |
CN109597638B (zh) | 基于实时计算引擎解决数据处理、设备联动的方法及装置 | |
CN114237588A (zh) | 一种代码仓库选择方法、装置、设备及存储介质 | |
CN113064982A (zh) | 一种问答库生成方法及相关设备 | |
CN106557586A (zh) | 数据库访问处理方法及装置 | |
CN114328572A (zh) | 基于sql解析器的数据查询方法、装置、系统及介质 | |
KR101798139B1 (ko) | 웹 기반 데이터 시각화 시스템에서의 데이터 변수타입에 따른 필터 시스템 및 방법 | |
KR100740690B1 (ko) | 컨텐츠 검색 시스템을 탑재한 정보단말기 | |
KR102442224B1 (ko) | 급상승 검색어에 대한 정보 제공 방법 및 시스템 | |
CN115168577B (zh) | 模型更新方法、装置、电子设备及存储介质 | |
CN115292194B (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 | ||
GR01 | Patent grant |