一、需求分析说明
通过对数据库系统原理的学习,掌握数据库管理系统的运行原理,尝试在给定的DBF文件操作框架的物理储存基础上通过java建立一个数据库管理系统,以更好的温习学习的知识。
基本功能如下:
实现创建表,并把约束条件存储到建立好的数据字典中
为表添加删除列操作和删除表操作
实现对表数据的插入操作,并实现插入前约束检测
实现对表数据删除操作
实现对表数据的修改操作,修改前对修改数据进行约束检测
实现对表数据的查询操作,完成多表查询,单条件多条件查询,单字段排序与多字段排序
实现对输入过的SQL语句进行系统日志记录,并添加时间
界面友好,易与操作,通过创建一个简单的窗口实现对SQL语句的输入和对运行结果的显示
该系统存在于com.silence.mysql包中,系统文件夹目录下的data文件夹是数据库DBF文件的存储目录,logs文件夹是系统日志文件目录。
该模块是数据库系统的主模块,在包主目录下,包括三个类DBMS.java、DBMSForm.java、MyException:
DBMS.java:系统的运行中心,通过输入的SQL语句开头将SQL语句传入到相应的子模块,并对SQL语句进行标准化预处理;通过对输入的正确的SQL语句实现对系统日志的记录
DBMSForm.java:系统的显示窗口,通过单例模式创建一个显示窗口,实现对SQl语句的输入操作和对运行结果的反馈显示,提供接口实现让其他模块运行时对UI界面的即时刷新,该类中的main函数是系统的运行入口
MyException.java:自定义异常,通过接收子模块抛出的运行时异常,实现将异常反馈输出到UI界面中供用户参考
该模块在包名下的dbf包中,通过javadbf4.1.jar包提供的DBF文件操作函数库,实现对数据库DBF文件的读写操作,该模块包括DBFContent.java和DBFUtils.java两个类。
DBFContent.java:这个是一个JavaBean,通过将读取到的DBF中数据存储到这个JavaBean中,实现对数据库中数据的操作
DBFUtils.java:DBF文件操作工具类,通过对javadbf4.1.jar中函数的调用,实现对DBF文件的读写操作,提供创建表,插入表和查询表的操作函数
该模块在包名下的where包中,通过对SQL字符串中提取的where块的解析,实现将where语句条件翻译成OR条件组,OR条件组中包括AND条件组,条件组类中提供对一条记录的条件匹配操作函数,进而实现对一条记录的where条件匹配操作,供数据库子模块使用。该模块包括两个类:OrOfWhere.java和AndOfWhere.java:
OrOfWhere.java:每个实例代表由OR连接的条件语句块的一边,OR语句块中可能包含多个And语句
AndOfWhere.java:每个实例代表一个AND连接的条件语句块的一边,AND语句块实现了Between…and…、=、<>、<、<=、>、>=条件匹配
该模块在包名下的module包中,其中包括Create.java、Alter.java、Drop.java、Insert.java、Delete.java、Update.java、Select.java七个功能,每个模块的构造函数和init()函数执行对SQL语句的解析和信息提取,合成可视化的执行类,模块中的excuteSQL()函数是该模块的执行函数,执行结果返回到DBMSForm中进行UI刷新,信息反馈。
2.4.1 Create创建表模块(Create.java)
通过对Create table Student(列名 数据类型 约束条件 ………);语句的截取得到表名,将“(”和“)”中间的字符串以逗号分开得到列字符串,再以空格分解得到列名,类型和约束条件。
通过对DBFUtils.createDBF()函数的调用实现表的创建操作,将约束条件作为记录添加到data目录下的“constraint.dbf”中实现对约束条件的数据字典存储,操作过程中,primary key,unique,not null模仿Linux中的权限数的方式,primary key为1,unique为2,not null为4,来实现一个整数记录三个约束条件的目的。
通过对SQL字符串拆分解析,提取表名、列名和“ADD”、“DROP”,将对应数据表中的数据读取到内存中,并根据列名对DBFContent中的字段数组进行增加和删除,再将执行后的DBFContent回写入DBF文件中,实现添加删除列操作。
由于每个数据库表以一个文件来存储,文件名即是表名,删除表操作实际上是提取SQL字符串中的表名,再到data文件夹下删除对应的文件。
根据空格拆分SQL字符串,提取表名和列属性的键值对,通过查找“constraint.dbf”中的对应表的记录获取该表的列约束条件,将约束条件与插入数据键值对和原表中记录进行匹配,若违反约束条件将拒绝插入;符合约束条件将原表中的数据DBFContent中添加新插入的记录数据,并将数据回写入DBF文件中,从而实现数据插入操作。
通过空格拆分SQL字符串得到待删除表名和删除Where条件,使用where模块中的OR和And条件组进行表中记录的条件匹配,将条件匹配的记录从DBFContent中删除,再把DBFContent回写入DBF文件,实现对表数据的删除操作。
通过空格拆分SQL字符串得到待修改表名、修改键值对和修改Where条件,使用where中的OR和AND条件组实现对表中需修改记录的查询,再通过查询“constraint.dbf”中的约束条件,和原表中的需修改记录以外的记录进行匹配操作,若修改数据违反约束条件,拒绝修改;若符合约束条件,则将待修改记录的对应键值对修改完成后,添加到其他记录组成的DBFContent中,回写到DBF文件中,实现数据表的修改操作。
通过以空格为分界点对SQL字符串进行拆分得到字符串数组,查找select,from,where,group by,order by限定字串的下标,将字符串数组拆分成各个限定子串的语句块。
Select后的语句块提取到Args类中,记录要查询的列名,特殊处理“*”为所有列名的通配符
From后的语句块为查询表表名,将其提取到List<String> froms中
Where通过where模块的OR和AND条件组将条件提取封装到OR条件组List中
Group by后的语句块提取到List<String> groups中
Order by后的语句块提取到List<String> orders中
之后,通过对每个模块的数据处理
translateWhere():提取where数组中的字符串以OR和AND为分界点,循环处理每个单条件
singleAndTranslate():将单条件中的比较符号,比较符号两边的数值或列名提取并封装到AndOfWhere中。
读取froms中的所有表DBF数据,根据列名键值对应相等将两个表进行连接,把第二个表多出的数据添加到第一个表,之后再和第三个表进行连接操作,以此类推。
在执行SQL语句查询时,得到的结果集根据orders中的列名和升序降序条件构造Comparer比较器,通过比较器实现对数据库结果集的排序输出
网友评论