CN110737642B - 数据库信息分析方法、装置、计算机装置及存储介质 - Google Patents

数据库信息分析方法、装置、计算机装置及存储介质 Download PDF

Info

Publication number
CN110737642B
CN110737642B CN201910839266.8A CN201910839266A CN110737642B CN 110737642 B CN110737642 B CN 110737642B CN 201910839266 A CN201910839266 A CN 201910839266A CN 110737642 B CN110737642 B CN 110737642B
Authority
CN
China
Prior art keywords
database
database table
data
data column
column
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.)
Active
Application number
CN201910839266.8A
Other languages
English (en)
Other versions
CN110737642A (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 Technology Shenzhen Co Ltd
Original Assignee
Ping An Technology Shenzhen Co 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 Technology Shenzhen Co Ltd filed Critical Ping An Technology Shenzhen Co Ltd
Priority to CN201910839266.8A priority Critical patent/CN110737642B/zh
Priority to PCT/CN2019/117416 priority patent/WO2021042532A1/zh
Publication of CN110737642A publication Critical patent/CN110737642A/zh
Application granted granted Critical
Publication of CN110737642B publication Critical patent/CN110737642B/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/21Design, administration or maintenance of databases
    • 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
    • G06F16/2365Ensuring data consistency and integrity

Landscapes

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

Abstract

本发明提供了一种数据库信息分析方法、装置、计算机装置及存储介质。所述方法包括:获取软件项目的SQL文件;提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表;查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表;输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;生成所述数据库的表结构文件;根据所述表结构文件修正所述SQL文件。本发明能够对软件项目的数据库信息进行分析和修正。

Description

数据库信息分析方法、装置、计算机装置及存储介质
技术领域
本发明涉及信息分析技术领域,具体涉及一种数据库信息分析方法、装置、计算机装置及计算机存储介质。
背景技术
在软件项目迁移或重构的过程中,可能会出现软件项目使用的数据库信息与数据库实际的数据库信息不一致的问题。为了避免软件项目因数据库信息不一致导致软件项目运行出错,需要对软件项目的数据库信息进行分析和修正。
发明内容
鉴于以上内容,有必要提出一种数据库信息分析方法、装置、计算机装置及计算机存储介质,其可以对软件项目的数据库信息进行分析和修正。
本申请的第一方面提供一种数据库信息分析方法,所述方法包括:
获取软件项目的SQL文件;
提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表;
查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表;
判断所述第一数据库表是否包含在所述第二数据库表中;
若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;
判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致;
若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;
若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件;
根据所述表结构文件修正所述SQL文件。
另一种可能的实现方式中,所述获取软件项目的SQL文件包括:
生成SQL文件配置界面,接收用户在所述SQL文件配置界面中设置的软件项目路径,根据所述软件项目路径获取所述SQL文件。
另一种可能的实现方式中,所述提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表包括:
根据所述SQL文件中的标签查找目标代码;
根据所述目标代码中的关键字提取所述第一数据列和所述第一数据库表。
另一种可能的实现方式中,所述查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表包括:
获取所述软件项目的数据源信息;
根据数据源信息建立与数据库的连接;
执行SQL查询语句,查询所述数据库中所有的第二数据列和所述数据列所在的第二数据库表。
另一种可能的实现方式中,所述生成所述数据库的表结构文件包括:
读取所述数据库的数据库脚本,将所述数据库脚本解析为对应的java实体类;
根据所述java实体类生成所述表结构文件。
另一种可能的实现方式中,所述方法还包括:
判断所述第二数据库表的数据格式是否正确,若所述第二数据库表的数据格式不正确,则发出数据库格式错误提示。
另一种可能的实现方式中,所述判断所述第二数据库表的数据格式是否正确包括:
获取所述第二数据库表中第二数据列的数据类型和数据长度;
若所述第二数据列的数据类型与预设数据类型一致且所述第二数据列的数据长度与预设数据长度一致,则所述第二数据库表的数据格式正确。
本申请的第二方面提供一种数据库信息分析装置,所述装置包括:
获取模块,用于获取软件项目的SQL文件;
提取模块,用于提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表;
查询模块,用于查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表;
第一判断模块,用于判断所述第一数据库表是否包含在所述第二数据库表中;
第一输出模块,用于若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;
第二判断模块,用于判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致;
第二输出模块,用于若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;
生成模块,用于若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件;
修正模块,用于根据所述表结构文件修正所述SQL文件。
本申请的第三方面提供一种计算机装置,所述计算机装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现所述数据库信息分析方法。
本申请的第四方面提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述数据库信息分析方法。
本发明获取软件项目的SQL文件;提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表;查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表;判断所述第一数据库表是否包含在所述第二数据库表中;若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致;若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件;根据所述表结构文件修正所述SQL文件。本发明实现了对软件项目的数据库信息进行分析和修正。
附图说明
图1是本发明实施例提供的数据库信息分析方法的流程图。
图2是本发明实施例提供的数据库信息分析装置的结构图。
图3是本发明实施例提供的计算机装置的示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
优选地,本发明的数据库信息分析方法应用在一个或者多个计算机装置中。所述计算机装置是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机装置可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机装置可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
实施例一
图1是本发明实施例一提供的数据库信息分析方法的流程图。所述数据库信息分析方法应用于计算机装置。所述数据库信息分析方法用于对软件项目的数据库信息进行分析和修正。
如图1所示,所述数据库信息分析方法包括:
101,获取软件项目的SQL(Structured Query Language,结构化查询语言)文件。
SQL是一种数据库查询和程序设计语言,用于在数据库中存取数据以及查询、更新和管理数据库。
可以生成SQL文件配置界面,接收用户在所述SQL文件配置界面中设置的软件项目路径,根据所述软件项目路径获取所述SQL文件。例如,所述软件项目路径可以是D:\eclipse\workspaces。
在一具体实施例中,所述根据所述软件项目路径获取所述SQL文件可以包括:遍历所述软件项目路径下所述软件项目所有的文件,从所述软件项目所有的文件中获取所述SQL文件。可以递归遍历所述软件项目路径下所述软件项目所有的文件。所述软件项目的每个文件夹下可以包含子文件夹和/或文件;如果该文件夹下包含子文件夹则继续遍历;如果该文件夹下包含文件,则判断该文件是否是SQL文件;如果该文件是SQL文件,则保存该SQL文件。
所述SQL文件可以是XML(Extensible Markup Language,可扩展标记语言)文件。所述SQL文件可以包括SQL语句。例如,所述SQL文件是testMapper.xml,该文件中包括SQL语句。SQL语句是用于对数据库进行操作的语句。
102,提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表。
可以根据所述SQL文件中的标签查找目标代码;根据所述目标代码中的关键字提取所述第一数据列和所述第一数据库表。
所述目标代码可以包括SQL语句和存储过程、触发器等。所述SQL语句用于对数据库表/数据列进行增加、删除、修改、查询等操作。
例如,所述SQL文件可以包括代码“<select id="select_allstudent"result_class="Student">select name from tbl_student where id=#id#</select>”。其中的标签为<select id="select_allstudent"result_class="Student"></select>,目标代码为“select name from tbl_student where id=#id#”,目标代码中的关键字为“select”、“from”、“where”。“name”、“id”为所述第一数据列,“tbl_student”为所述第一数据列“name”、“id”所在的第一数据库表。
可以根据所述第一数据列和所述第一数据库表生成第一列表。
所述第一列表除了第一数据库表、第一数据列,还可以包括数据库、数据库用户名、存储过程、触发器等字段信息。
可以按照预设顺序生成所述第一列表。例如,按照所述第一数据列或所述第一数据库表的首字母顺序生成所述第一列表。
103,查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表。
在一具体实施例中,可以按照以下方式查询所述软件项目连接的数据库中所有的第二数据列和所述数据列所在的第二数据库表:获取所述软件项目的数据源信息;根据数据源信息建立与数据库的连接;执行SQL查询语句,查询所述数据库中所有的第二数据列和所述数据列所在的第二数据库表。
所述数据源信息是所述创建数据库连接的配置信息,可以包括数据库用户名、数据库登录密码、链接串、驱动类等。例如,数据库用户名表示为"username"、数据库登录密码表示为"password",驱动类表示为"oracle.jdbc.driver.OracleDriver",链接串表示为"jdbc:oracle:thin:@127.0.0.1:DEV"。
可以根据所述第二数据列和所述第二数据库表生成第二列表。
所述第二列表除了第二数据列、第二数据库表,还可以包括数据库、数据库用户名、存储过程、触发器等字段信息。
可以按照预设顺序生成所述第二列表。例如,按照所述第二数据列或所述第二数据库表的首字母顺序生成所述第二列表。
104,判断所述第一数据库表是否包含在所述第二数据库表中。
所述第一数据库表包含在所述第二数据库表中是指所述第一数据库表中的每个数据库表都包含在所述第二数据库表中。
例如,所述第一数据库表包括Table1、Table2、Table3、Table4,所述第二数据库表包括Table1、Table2、Table3、Table4、Table5,则所述第一数据库表包含在所述第二数据库表中。
又如,所述第一数据库表包括Table1、Table2、Table3、Table4、Table5,所述第二数据库表包括Table1、Table2、Table3、Table4、Table5,则所述第一数据库表包含在所述第二数据库表中。
再如,所述第一数据库表包括Table1、Table2、Table3、Table4、Table5,所述第二数据库表包括Table1、Table2、Table3、Table4,则所述第一数据库表不包含在所述第二数据库表中。
可以根据所述第一列表和所述第二列表判断所述第一数据库表是否包含在所述第二数据库表中。
可以使用COMPARE方法对所述第一列表中的第一数据库表和所述第二列表中的第二数据库表进行对比,判断所述第一数据库表与所述第二数据库表是否一致。若所述第一数据库表与所述第二数据库表一致,则判断所述第一数据库表包含在所述第二数据库表中。
105,若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表。
所述第一数据库表中存在而所述第二数据库表中不存在的数据库表表示所述软件项目错误使用的数据库表。
例如,所述第一数据库表包括Table1、Table2、Table3、Table4、Table5,所述第二数据库表包括Table1、Table2、Table3、Table4,所述第一数据库表不包含在所述第二数据库表中,输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表Table5。
若所述第一数据库表不包含在所述第二数据库表中,可以发出数据库表错误提示或发送数据库表错误通知。可以通过语音或文字发出所述数据库表错误提示。可以通过邮件、短信、微信等方式将所述数据库表错误通知发送给预设联系人。
可选地,在本实施例中,还可以判断所述第二数据库表是否包含在所述第一数据库表中;若所述第二数据库表不包含在所述第一数据库表中,输出所述第二数据库表中存在而所述第一数据库表中不存在的数据库表。
所述第二数据库表中存在而所述第一数据库表中不存在的数据库表表示所述软件项目没有使用的数据库表。输出所述第二数据库表中存在而所述第一数据库表中不存在的数据库表可以提醒用户确认数据库表信息是否有误。
106,判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致。
所述第一数据列包含在所述第二数据列中是指所述第一数据列中的每个数据列都包含在所述第二数据列中。
例如,所述第一数据列包括Line1、Line2、Line3、Line4,所述第二数据列包括Line1、Line2、Line3、Line4、Line5,则所述第一数据列包含在所述第二数据列中。
又如,所述第一数据列包括Line1、Line2、Line3、Line4、Line5,所述第二数据列包括Line1、Line2、Line3、Line4,则所述第一数据列不包含在所述第二数据列中。
可以根据所述第一列表和所述第二列表判断所述第一数据列是否包含在所述第二数据列中。
可以使用COMPARE方法对所述第一列表中的第一数据列和所述第二列表中的第二数据列进行对比,判断所述第一数据列与所述第二数据列是否一致。若所述第一数据列与所述第二数据列一致,则判断所述第一数据列包含在所述第二数据列中。
所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表一致是指每个第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表一致。
例如,所述第一数据列包括Line1、Line2、Line3、Line4,第一数据列Line1所在的第一数据库表为Table1,第一数据列Line2所在的第一数据库表为Table2,第一数据列Line3所在的第一数据库表为Table3,第一数据列Line4所在的第一数据库表为Table4,所述第二数据列包括Line1、Line2、Line3、Line4、Line5,第二数据列Line1所在的第二数据库表为Table1,第二数据列Line2所在的第二数据库表为Table2,第二数据列Line3所在的第二数据库表为Table3,第二数据列Line4所在的第二数据库表为Table4,则所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表一致。
又如,所述第一数据列包括Line1、Line2、Line3、Line4,第一数据列Line1所在的第一数据库表为Table1,第一数据列Line2所在的第一数据库表为Table2,第一数据列Line3所在的第一数据库表为Table3,第一数据列Line4所在的第一数据库表为Table4;所述第二数据列包括Line1、Line2、Line3、Line4、Line5,第二数据列Line1所在的第二数据库表为Table1,第二数据列Line2所在的第二数据库表为Table1,第二数据列Line3所在的第二数据库表为Table1,第二数据列Line4所在的第二数据库表为Table4,则所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致。
可以根据所述第一列表和所述第二列表判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致。
107,若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列。
例如,所述第一数据列包括Line1、Line2、Line3、Line4、Line5,所述第二数据列包括Line1、Line2、Line3、Line4,所述第一数据列不包含在所述第二数据列中,输出所述第一数据列中存在而所述第二数据列中不存在的数据列Line5。
又如,所述第一数据列包括Line1、Line2、Line3、Line4,第一数据列Line1所在的第一数据库表为Table1,第一数据列Line2所在的第一数据库表为Table2,第一数据列Line3所在的第一数据库表为Table3,第一数据列Line4所在的第一数据库表为Table4,所述第二数据列包括Line1、Line2、Line3、Line4、Line5,第二数据列Line1所在的第二数据库表为Table1,第二数据列Line2所在的第二数据库表为Table1,第二数据列Line3所在的第二数据库表为Table1,第二数据列Line4所在的第二数据库表为Table4,所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列Line2、Line3。
若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,可以发出数据列错误提示或发送数据列错误通知。可以通过语音或文字发出所述数据列错误提示。可以通过邮件、短信、微信等方式将所述数据列错误通知发送给预设联系人。
需要说明的是,上述104、105与106、107的顺序可以互换。上述实施例是先对数据库表进行判断,在其他的实施例中,可以先对数据列进行判断。
108,若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件。
所述数据库的表结构文件表示所述数据库包含的所有数据库表和数据库列,以及数据库列与数据库表的对应关系。
在一具体实施例中,所述方法应用于Java,所述生成所述数据库的表结构文件可以包括:
1、读取所述数据库的数据库脚本,将所述数据库脚本解析为对应的java实体类。
所述java实体类是在JAVA软件开发中广泛使用的概念。所述java实体类是一个包含Set和Get方法的类,通常可和数据库联系在一起。
所述数据库脚本在创建所述数据库和所述数据库中的数据库表时生成。
所述数据库脚本可以包含一个或多个数据表。将所述数据库脚本解析为对应的java实体类就是将所述数据库脚本解析封装为所述一个或多个数据表对应的java实体类。具体地,可以识别所述数据库脚本包含的数据库表,将每个数据库表包含的数据信息解析封装为一个对应的java实体类。也就是说,每个java实体类对应所述数据库脚本中的一个数据表,解析一个所述数据库脚本可以得到对应的一个或多个java实体类。
可以通过设定的工具(例如PowerDesigner)导出所述数据库脚本。
可以根据接收到的数据库命令导出所述数据库脚本。
2、根据所述java实体类生成所述表结构文件。
可以根据实际需要设置所述表结构文件的样式。例如,设置多个数据表标题的样式(包括字体、显示位置等),以及多个表格结构的样式(包括表格尺寸、填充色、数据显示格式等)。
在一具体实施例中,所述表结构文件可以包括数据库表、表备注、数据列、数据列备注、数据列类型等。例如,在所述表结构文件中,用“tableName”表示数据库表,用“tableComment”表示表备注,用“columName”表示数据列,用“columComment”表示数据列备注,用“columType”表示数据列类型。
本实施例中,若所述数据库脚本中包含多个数据表,可以得到对应的多个java实体类。因此,根据所述数据库脚本对应的java实体类生成对应的表结构文件中,也包含多个数据表结构。
109,根据所述表结构文件修正所述SQL文件。
根据所述表结构文件修正所述SQL文件,就是修正所述SQL文件中所述第一数据库表中存在而所述第二数据库表中不存在的数据库表,和/或修正所述SQL文件中所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或修正所述SQL文件中所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列。
对于所述第一数据库表中存在而所述第二数据库表中不存在的数据库表或者所述第一数据列中存在而所述第二数据列中不存在的数据列,可以根据所述表结构文件查找所述第一数据库表中存在而所述第二数据库表中不存在的数据库表的替代数据库表,查找所述第一数据列中存在而所述第二数据列中不存在的数据列的替代数据库列,以所述替代数据库表取代所述SQL文件中所述第一数据库表中存在而所述第二数据库表中不存在的数据库表,以所述替代数据库列取代所述SQL文件中所述第一数据列中存在而所述第二数据列中不存在的数据列。可以根据所述表结构文件中的表备注、数据列备注、数据列类型等确定所述替代数据库表和替代数据库列。
对于所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列,可以根据所述表结构文件查找所述不一致的第一数据列对应的第二数据表,以所述不一致的第一数据列所对应的第二数据表取代所述SQL文件中所述不一致的第一数据列所在的第一数据表。
实施例一的数据库信息分析方法获取软件项目的SQL文件;提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表;查询所述软件项目连接的数据库中所有的第二数据列和所述数据列所在的第二数据库表;判断所述第一数据库表是否包含在所述第二数据库表中;若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致;若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件;根据所述表结构文件修正所述SQL文件。实施例一对软件项目的数据库信息进行分析,当软件项目使用的数据库信息与数据库实际的数据库信息不一致对软件项目的数据库信息进行修正,从而降低软件项目使用的数据库信息与数据库实际的数据库信息不一致的风险,提高软件质量。
实施例二
图2是本发明实施例二提供的数据库信息分析装置的结构图。所述数据库信息分析装置20应用于计算机装置,用于对软件项目的数据库信息进行分析和修正。
如图2所示,所述数据库信息分析装置20可以包括获取模块201、提取模块202、查询模块203、第一判断模块204、第一输出模块205、第二判断模块206、第二输出模块207、生成模块208、修正模块209。
获取模块201,用于获取软件项目的SQL(Structured Query Language,结构化查询语言)文件。
SQL是一种数据库查询和程序设计语言,用于在数据库中存取数据以及查询、更新和管理数据库。
可以生成SQL文件配置界面,接收用户在所述SQL文件配置界面中设置的软件项目路径,根据所述软件项目路径获取所述SQL文件。例如,所述软件项目路径可以是D:\eclipse\workspaces。
在一具体实施例中,所述根据所述软件项目路径获取所述SQL文件可以包括:遍历所述软件项目路径下所述软件项目所有的文件,从所述软件项目所有的文件中获取所述SQL文件。可以递归遍历所述软件项目路径下所述软件项目所有的文件。所述软件项目的每个文件夹下可以包含子文件夹和/或文件;如果该文件夹下包含子文件夹则继续遍历;如果该文件夹下包含文件,则判断该文件是否是SQL文件;如果该文件是SQL文件,则保存该SQL文件。
所述SQL文件可以是XML(Extensible Markup Language,可扩展标记语言)文件。所述SQL文件可以包括SQL语句。例如,所述SQL文件是testMapper.xml,该文件中包括SQL语句。SQL语句是用于对数据库进行操作的语句。
提取模块202,用于提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表。
可以根据所述SQL文件中的标签查找目标代码;根据所述目标代码中的关键字提取所述第一数据列和所述第一数据库表。
所述目标代码可以包括SQL语句和存储过程、触发器等。所述SQL语句用于对数据库表/数据列进行增加、删除、修改、查询等操作。
例如,所述SQL文件可以包括代码“<select id="select_allstudent"result_class="Student">select name from tbl_student where id=#id#</select>”。其中的标签为<select id="select_allstudent"result_class="Student"></select>,目标代码为“select name from tbl_student where id=#id#”,目标代码中的关键字为“select”、“from”、“where”。“name”、“id”为所述第一数据列,“tbl_student”为所述第一数据列“name”、“id”所在的第一数据库表。
可以根据所述第一数据列和所述第一数据库表生成第一列表。
所述第一列表除了第一数据库表、第一数据列,还可以包括数据库、数据库用户名、存储过程、触发器等字段信息。
可以按照预设顺序生成所述第一列表。例如,按照所述第一数据列或所述第一数据库表的首字母顺序生成所述第一列表。
查询模块203,用于查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表。
在一具体实施例中,可以按照以下方式查询所述软件项目连接的数据库中所有的第二数据列和所述数据列所在的第二数据库表:获取所述软件项目的数据源信息;根据数据源信息建立与数据库的连接;执行SQL查询语句,查询所述数据库中所有的第二数据列和所述数据列所在的第二数据库表。
所述数据源信息是所述创建数据库连接的配置信息,可以包括数据库用户名、数据库登录密码、链接串、驱动类等。例如,数据库用户名表示为"username"、数据库登录密码表示为"password",驱动类表示为"oracle.jdbc.driver.OracleDriver",链接串表示为"jdbc:oracle:thin:@127.0.0.1:DEV"。
可以根据所述第二数据列和所述第二数据库表生成第二列表。
所述第二列表除了第二数据列、第二数据库表,还可以包括数据库、数据库用户名、存储过程、触发器等字段信息。
可以按照预设顺序生成所述第二列表。例如,按照所述第二数据列或所述第二数据库表的首字母顺序生成所述第二列表。
第一判断模块204,用于判断所述第一数据库表是否包含在所述第二数据库表中。
所述第一数据库表包含在所述第二数据库表中是指所述第一数据库表中的每个数据库表都包含在所述第二数据库表中。
例如,所述第一数据库表包括Table1、Table2、Table3、Table4,所述第二数据库表包括Table1、Table2、Table3、Table4、Table5,则所述第一数据库表包含在所述第二数据库表中。
又如,所述第一数据库表包括Table1、Table2、Table3、Table4、Table5,所述第二数据库表包括Table1、Table2、Table3、Table4、Table5,则所述第一数据库表包含在所述第二数据库表中。
再如,所述第一数据库表包括Table1、Table2、Table3、Table4、Table5,所述第二数据库表包括Table1、Table2、Table3、Table4,则所述第一数据库表不包含在所述第二数据库表中。
可以根据所述第一列表和所述第二列表判断所述第一数据库表是否包含在所述第二数据库表中。
可以使用COMPARE方法对所述第一列表中的第一数据库表和所述第二列表中的第二数据库表进行对比,判断所述第一数据库表与所述第二数据库表是否一致。若所述第一数据库表与所述第二数据库表一致,则判断所述第一数据库表包含在所述第二数据库表中。
第一输出模块205,用于若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表。
所述第一数据库表中存在而所述第二数据库表中不存在的数据库表表示所述软件项目错误使用的数据库表。
例如,所述第一数据库表包括Table1、Table2、Table3、Table4、Table5,所述第二数据库表包括Table1、Table2、Table3、Table4,所述第一数据库表不包含在所述第二数据库表中,输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表Table5。
若所述第一数据库表不包含在所述第二数据库表中,可以发出数据库表错误提示或发送数据库表错误通知。可以通过语音或文字发出所述数据库表错误提示。可以通过邮件、短信、微信等方式将所述数据库表错误通知发送给预设联系人。
可选地,在本实施例中,还可以判断所述第二数据库表是否包含在所述第一数据库表中;若所述第二数据库表不包含在所述第一数据库表中,输出所述第二数据库表中存在而所述第一数据库表中不存在的数据库表。
所述第二数据库表中存在而所述第一数据库表中不存在的数据库表表示所述软件项目没有使用的数据库表。输出所述第二数据库表中存在而所述第一数据库表中不存在的数据库表可以提醒用户确认数据库表信息是否有误。
第二判断模块206,用于判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致。
所述第一数据列包含在所述第二数据列中是指所述第一数据列中的每个数据列都包含在所述第二数据列中。
例如,所述第一数据列包括Line1、Line2、Line3、Line4,所述第二数据列包括Line1、Line2、Line3、Line4、Line5,则所述第一数据列包含在所述第二数据列中。
又如,所述第一数据列包括Line1、Line2、Line3、Line4、Line5,所述第二数据列包括Line1、Line2、Line3、Line4,则所述第一数据列不包含在所述第二数据列中。
可以根据所述第一列表和所述第二列表判断所述第一数据列是否包含在所述第二数据列中。
可以使用COMPARE方法对所述第一列表中的第一数据列和所述第二列表中的第二数据列进行对比,判断所述第一数据列与所述第二数据列是否一致。若所述第一数据列与所述第二数据列一致,则判断所述第一数据列包含在所述第二数据列中。
所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表一致是指每个第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表一致。
例如,所述第一数据列包括Line1、Line2、Line3、Line4,第一数据列Line1所在的第一数据库表为Table1,第一数据列Line2所在的第一数据库表为Table2,第一数据列Line3所在的第一数据库表为Table3,第一数据列Line4所在的第一数据库表为Table4,所述第二数据列包括Line1、Line2、Line3、Line4、Line5,第二数据列Line1所在的第二数据库表为Table1,第二数据列Line2所在的第二数据库表为Table2,第二数据列Line3所在的第二数据库表为Table3,第二数据列Line4所在的第二数据库表为Table4,则所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表一致。
又如,所述第一数据列包括Line1、Line2、Line3、Line4,第一数据列Line1所在的第一数据库表为Table1,第一数据列Line2所在的第一数据库表为Table2,第一数据列Line3所在的第一数据库表为Table3,第一数据列Line4所在的第一数据库表为Table4;所述第二数据列包括Line1、Line2、Line3、Line4、Line5,第二数据列Line1所在的第二数据库表为Table1,第二数据列Line2所在的第二数据库表为Table1,第二数据列Line3所在的第二数据库表为Table1,第二数据列Line4所在的第二数据库表为Table4,则所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致。
可以根据所述第一列表和所述第二列表判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致。
第二输出模块207,用于若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列。
例如,所述第一数据列包括Line1、Line2、Line3、Line4、Line5,所述第二数据列包括Line1、Line2、Line3、Line4,所述第一数据列不包含在所述第二数据列中,输出所述第一数据列中存在而所述第二数据列中不存在的数据列Line5。
又如,所述第一数据列包括Line1、Line2、Line3、Line4,第一数据列Line1所在的第一数据库表为Table1,第一数据列Line2所在的第一数据库表为Table2,第一数据列Line3所在的第一数据库表为Table3,第一数据列Line4所在的第一数据库表为Table4,所述第二数据列包括Line1、Line2、Line3、Line4、Line5,第二数据列Line1所在的第二数据库表为Table1,第二数据列Line2所在的第二数据库表为Table1,第二数据列Line3所在的第二数据库表为Table1,第二数据列Line4所在的第二数据库表为Table4,所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列Line2、Line3。
若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,可以发出数据列错误提示或发送数据列错误通知。可以通过语音或文字发出所述数据列错误提示。可以通过邮件、短信、微信等方式将所述数据列错误通知发送给预设联系人。
需要说明的是,上述模块204、205与模块206、207的顺序可以互换。上述实施例是先对数据库表进行判断,在其他的实施例中,可以先对数据列进行判断。
生成模块208,用于若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件。
所述数据库的表结构文件表示所述数据库包含的所有数据库表和数据库列,以及数据库列与数据库表的对应关系。
在一具体实施例中,所述方法应用于Java,所述生成所述数据库的表结构文件可以包括:
1、读取所述数据库的数据库脚本,将所述数据库脚本解析为对应的java实体类。
所述java实体类是在JAVA软件开发中广泛使用的概念。所述java实体类是一个包含Set和Get方法的类,通常可和数据库联系在一起。
所述数据库脚本在创建所述数据库和所述数据库中的数据库表时生成。
所述数据库脚本可以包含一个或多个数据表。将所述数据库脚本解析为对应的java实体类就是将所述数据库脚本解析封装为所述一个或多个数据表对应的java实体类。具体地,可以识别所述数据库脚本包含的数据库表,将每个数据库表包含的数据信息解析封装为一个对应的java实体类。也就是说,每个java实体类对应所述数据库脚本中的一个数据表,解析一个所述数据库脚本可以得到对应的一个或多个java实体类。
可以通过设定的工具(例如PowerDesigner)导出所述数据库脚本。
可以根据接收到的数据库命令导出所述数据库脚本。
2、根据所述java实体类生成所述表结构文件。
可以根据实际需要设置所述表结构文件的样式。例如,设置多个数据表标题的样式(包括字体、显示位置等),以及多个表格结构的样式(包括表格尺寸、填充色、数据显示格式等)。
在一具体实施例中,所述表结构文件可以包括数据库表、表备注、数据列、数据列备注、数据列类型等。例如,在所述表结构文件中,用“tableName”表示数据库表,用“tableComment”表示表备注,用“columName”表示数据列,用“columComment”表示数据列备注,用“columType”表示数据列类型。
本实施例中,若所述数据库脚本中包含多个数据表,可以得到对应的多个java实体类。因此,根据所述数据库脚本对应的java实体类生成对应的表结构文件中,也包含多个数据表结构。
修正模块209,用于根据所述表结构文件修正所述SQL文件。
根据所述表结构文件修正所述SQL文件,就是修正所述SQL文件中所述第一数据库表中存在而所述第二数据库表中不存在的数据库表,和/或修正所述SQL文件中所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或修正所述SQL文件中所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列。
对于所述第一数据库表中存在而所述第二数据库表中不存在的数据库表或者所述第一数据列中存在而所述第二数据列中不存在的数据列,可以根据所述表结构文件查找所述第一数据库表中存在而所述第二数据库表中不存在的数据库表的替代数据库表,查找所述第一数据列中存在而所述第二数据列中不存在的数据列的替代数据库列,以所述替代数据库表取代所述SQL文件中所述第一数据库表中存在而所述第二数据库表中不存在的数据库表,以所述替代数据库列取代所述SQL文件中所述第一数据列中存在而所述第二数据列中不存在的数据列。可以根据所述表结构文件中的表备注、数据列备注、数据列类型等确定所述替代数据库表和替代数据库列。
对于所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列,可以根据所述表结构文件查找所述不一致的第一数据列对应的第二数据表,以所述不一致的第一数据列所对应的第二数据表取代所述SQL文件中所述不一致的第一数据列所在的第一数据表。
实施例二的数据库信息分析装置20获取软件项目的SQL文件;提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表;查询所述软件项目连接的数据库中所有的第二数据列和所述数据列所在的第二数据库表;判断所述第一数据库表是否包含在所述第二数据库表中;若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致;若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件;根据所述表结构文件修正所述SQL文件。实施例二对软件项目的数据库信息进行分析,当软件项目使用的数据库信息与数据库实际的数据库信息不一致对软件项目的数据库信息进行修正,从而降低软件项目使用的数据库信息与数据库实际的数据库信息不一致的风险,提高软件质量。
实施例三
本实施例提供一种计算机存储介质,该计算机存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述数据库信息分析方法实施例中的步骤,例如图1所示的101-109:
101,获取软件项目的SQL文件;
102,提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表;
103,查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表;
104,判断所述第一数据库表是否包含在所述第二数据库表中;
105,若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;
106,判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致;
107,若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;
108,若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件;
109,根据所述表结构文件修正所述SQL文件。
或者,该计算机程序被处理器执行时实现上述装置实施例中各模块的功能,例如图2中的模块201-209:
获取模块201,用于获取软件项目的SQL文件;
提取模块202,用于提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表;
查询模块203,用于查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表;
第一判断模块204,用于判断所述第一数据库表是否包含在所述第二数据库表中;
第一输出模块205,用于若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;
第二判断模块206,用于判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致;
第二输出模块207,用于若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;
生成模块208,用于若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件;
修正模块209,用于根据所述表结构文件修正所述SQL文件。
实施例四
图3为本发明实施例四提供的计算机装置的示意图。所述计算机装置30包括存储器301、处理器302以及存储在所述存储器301中并可在所述处理器302上运行的计算机程序303,例如数据库信息分析程序。所述处理器302执行所述计算机程序303时实现上述数据库信息分析方法实施例中的步骤,例如图1所示的101-109。或者,该计算机程序被处理器执行时实现上述装置实施例中各模块的功能,例如图2中的模块201-209。
示例性的,所述计算机程序303可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器301中,并由所述处理器302执行,以完成本方法。所述一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序303在所述计算机装置30中的执行过程。例如,所述计算机程序303可以被分割成图2中的获取模块201、提取模块202、查询模块203、第一判断模块204、第一输出模块205、第二判断模块206、第二输出模块207、生成模块208、修正模块209,各模块具体功能参见实施例二。
所述计算机装置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文件中所述不一致的第一数据列所在的第一数据表。
2.如权利要求1所述的方法,其特征在于,所述获取软件项目的SQL文件包括:
生成SQL文件配置界面,接收用户在所述SQL文件配置界面中设置的软件项目路径,根据所述软件项目路径获取所述SQL文件。
3.如权利要求1所述的方法,其特征在于,所述提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表包括:
根据所述SQL文件中的标签查找所述目标代码;
根据所述目标代码中的关键字提取所述第一数据列和所述第一数据库表。
4.如权利要求1所述的方法,其特征在于,所述查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表包括:
获取所述软件项目的数据源信息;
根据数据源信息建立与数据库的连接;
执行SQL查询语句,查询所述数据库中所有的第二数据列和所述数据列所在的第二数据库表。
5.如权利要求1所述的方法,其特征在于,所述生成所述数据库的表结构文件包括:
读取所述数据库的数据库脚本,将所述数据库脚本解析为对应的java实体类;
根据所述java实体类生成所述表结构文件。
6.如权利要求1-5中任一项所述的方法,其特征在于,所述方法还包括:
判断所述第二数据库表的数据格式是否正确,若所述第二数据库表的数据格式不正确,则发出数据库格式错误提示。
7.如权利要求6所述的方法,其特征在于,所述判断所述第二数据库表的数据格式是否正确包括:
获取所述第二数据库表中第二数据列的数据类型和数据长度;
若所述第二数据列的数据类型与预设数据类型一致且所述第二数据列的数据长度与预设数据长度一致,则所述第二数据库表的数据格式正确。
8.一种数据库信息分析装置,其特征在于,所述装置包括:
获取模块,用于获取软件项目的SQL文件;
提取模块,用于提取所述SQL文件中所有的第一数据列和所述第一数据列所在的第一数据库表,所述第一数据列是所述SQL文件的目标代码中的数据列,所述第一数据库表是所述目标代码中的数据表;
查询模块,用于查询所述软件项目连接的数据库中所有的第二数据列和所述第二数据列所在的第二数据库表;
第一判断模块,用于判断所述第一数据库表是否包含在所述第二数据库表中;
第一输出模块,用于若所述第一数据库表不包含在所述第二数据库表中,则输出所述第一数据库表中存在而所述第二数据库表中不存在的数据库表;
第二判断模块,用于判断所述第一数据列是否包含在所述第二数据列中,以及判断所述第一数据列所在的第一数据库表是否与所述第二数据列所在的第二数据库表一致;
第二输出模块,用于若所述第一数据列不包含在所述第二数据列中,和/或所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则输出所述第一数据列中存在而所述第二数据列中不存在的数据列,和/或输出所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列;
生成模块,用于若所述第一数据库表不包含在所述第二数据库表中,或者所述第一数据列不包含在所述第二数据列中,或者所述第一数据列所在的第一数据库表与所述第二数据列所在的第二数据库表不一致,则生成所述数据库的表结构文件;
修正模块,用于根据所述表结构文件修正所述SQL文件,包括:根据所述表结构文件查找所述第一数据库表中存在而所述第二数据库表中不存在的数据库表的替代数据库表,和/或查找所述第一数据列中存在而所述第二数据列中不存在的数据列的替代数据库列,以所述替代数据库表取代所述SQL文件中所述第一数据库表中存在而所述第二数据库表中不存在的数据库表,和/或以所述替代数据库列取代所述SQL文件中所述第一数据列中存在而所述第二数据列中不存在的数据列;对于所在的第一数据库表与所述第二数据列所在的第二数据库表不一致的第一数据列,根据所述表结构文件查找所述不一致的第一数据列对应的第二数据表,以所述不一致的第一数据列所对应的第二数据表取代所述SQL文件中所述不一致的第一数据列所在的第一数据表。
9.一种计算机装置,其特征在于:所述计算机装置包括处理器,所述处理器用于执行存储器中存储的计算机程序以实现如权利要求1-7中任一项所述数据库信息分析方法。
10.一种计算机存储介质,所述计算机存储介质上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述数据库信息分析方法。
CN201910839266.8A 2019-09-05 2019-09-05 数据库信息分析方法、装置、计算机装置及存储介质 Active CN110737642B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201910839266.8A CN110737642B (zh) 2019-09-05 2019-09-05 数据库信息分析方法、装置、计算机装置及存储介质
PCT/CN2019/117416 WO2021042532A1 (zh) 2019-09-05 2019-11-12 数据库信息分析方法、装置、计算机装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910839266.8A CN110737642B (zh) 2019-09-05 2019-09-05 数据库信息分析方法、装置、计算机装置及存储介质

Publications (2)

Publication Number Publication Date
CN110737642A CN110737642A (zh) 2020-01-31
CN110737642B true CN110737642B (zh) 2022-09-02

Family

ID=69267744

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910839266.8A Active CN110737642B (zh) 2019-09-05 2019-09-05 数据库信息分析方法、装置、计算机装置及存储介质

Country Status (2)

Country Link
CN (1) CN110737642B (zh)
WO (1) WO2021042532A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114996364B (zh) * 2022-04-28 2023-02-03 北京原点数安科技有限公司 一种PaaS云数据库审计日志的分类分级方法、装置及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103929763A (zh) * 2013-01-11 2014-07-16 阿尔卡特朗讯 一种用于比较和重构地理冗余的数据库的方法
CN104252481A (zh) * 2013-06-27 2014-12-31 阿里巴巴集团控股有限公司 主从数据库一致性的动态校验方法和装置
CN104699748A (zh) * 2014-12-19 2015-06-10 深圳市燃气集团股份有限公司 一种展示不固定列报表的方法及其系统
CN109254969A (zh) * 2018-08-31 2019-01-22 平安科技(深圳)有限公司 数据表处理方法、装置、设备及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050149582A1 (en) * 2003-12-29 2005-07-07 Wissmann Joseph T. Method and system for synchronization of copies of a database
CN101046812A (zh) * 2006-06-12 2007-10-03 华为技术有限公司 一种数据库表记录构造与检查的方法及其装置
CN100458793C (zh) * 2007-05-10 2009-02-04 浪潮集团山东通用软件有限公司 数据访问层Xml格式数据与关系数据间的映射转换方法
CN102541966A (zh) * 2010-12-30 2012-07-04 国际商业机器公司 用于验证数据库系统正确性的方法和装置
US8938424B2 (en) * 2012-10-31 2015-01-20 Ca, Inc. System and method of assessing the state of a database product for installation consistency
CN107688618B (zh) * 2017-08-08 2019-03-12 平安科技(深圳)有限公司 数据对比方法、装置、计算机设备和存储介质
CN108388606B (zh) * 2018-02-06 2022-01-25 福建星瑞格软件有限公司 一种校验Sql语句中库表字段名的方法以及计算机设备
CN109508355A (zh) * 2018-10-19 2019-03-22 平安科技(深圳)有限公司 一种数据抽取方法、系统及终端设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103929763A (zh) * 2013-01-11 2014-07-16 阿尔卡特朗讯 一种用于比较和重构地理冗余的数据库的方法
CN104252481A (zh) * 2013-06-27 2014-12-31 阿里巴巴集团控股有限公司 主从数据库一致性的动态校验方法和装置
CN104699748A (zh) * 2014-12-19 2015-06-10 深圳市燃气集团股份有限公司 一种展示不固定列报表的方法及其系统
CN109254969A (zh) * 2018-08-31 2019-01-22 平安科技(深圳)有限公司 数据表处理方法、装置、设备及存储介质

Also Published As

Publication number Publication date
WO2021042532A1 (zh) 2021-03-11
CN110737642A (zh) 2020-01-31

Similar Documents

Publication Publication Date Title
CN108762743B (zh) 一种数据表操作代码生成方法及装置
AU2009238294B2 (en) Data transformation based on a technical design document
US9047346B2 (en) Reporting language filtering and mapping to dimensional concepts
CN107741935B (zh) 数据导入方法及数据导入装置
CN110955428A (zh) 一种页面显示方法、装置、电子设备及介质
CN107665227B (zh) 一种数据版本控制方法及数据版本控制器
US9507751B2 (en) Managing seed data
CN111309760A (zh) 数据检索方法、系统、设备及存储介质
EP3443460B1 (en) Method, apparatus, and computer-readable medium for performing functional testing of software
CN115061721A (zh) 一种报表生成方法、装置、计算机设备及存储介质
CN111626028A (zh) 基于函数解析的报表生成方法、装置、设备及计算机介质
CN112035443A (zh) 基于Linux平台的大数据执行方法、系统、设备及存储介质
CN110806866A (zh) 一种前端管理系统的生成方法及装置
EP3486798A1 (en) Reporting and data governance management
CN111475196B (zh) 编译告警溯源方法、装置、电子设备及计算机可读介质
CN112558940A (zh) 基于表格的网站页面开发方法、装置、设备及存储介质
JP2016045545A (ja) 影響調査システム、影響調査方法、および影響調査プログラム
WO2021022703A1 (zh) 软件项目重构方法、装置、计算机装置及存储介质
CN110737642B (zh) 数据库信息分析方法、装置、计算机装置及存储介质
CN108694172B (zh) 信息输出方法和装置
CN110633258B (zh) 日志插入方法、装置、计算机装置及存储介质
CN112948400A (zh) 一种数据库管理方法、数据库管理装置及终端设备
EP3486799A1 (en) Reporting and data governance management
US11983526B2 (en) Software inquiry information management system and software inquiry information management method
CN115295109A (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