数据库课程设计实验报告范例2.docx
《数据库课程设计实验报告范例2.docx》由会员分享,可在线阅读,更多相关《数据库课程设计实验报告范例2.docx(16页珍藏版)》请在冰豆网上搜索。
数据库课程设计实验报告范例2
数据库课程设计实验报告
一、实验目的
》熟练掌握、加深理解并巩固《数据库原理》课程中所学到的基本概念、基本原理和基本技术
》综合利用所学到的关于数据库系统的一般原理和技术,以及其他课程的
有关知识,来设计、实现一个以数据库为核心的应用软件系统
》培养分析问题、解决问题的能力,进一步提高进行大型程序设计的能力
二、实验环境
➢操作系统:
WindowsXP
》开发语言:
Java
➢开发工具:
EclipseJDK
➢使用到的其他工具:
SWTDesigner、javaCup、jLex
三、SQL编译
1.词法分析
一般关键字:
ALL、AND、ANY、AS、ASC、BY、CREATE、DELETE、DESC、ESCAPE、FROM、INSERT、INTO、KEY、LIKE、NOT、NULL、OR、ORDER、PRIMARY、SELECT、TABLE、VALUES、WHERE、UPDATE、SET、INDEX、VIEW、ON、DROP、ALTER、ADD
数据类型关键字:
INT、FLOAT、STRING、BOOLEAN
操作符号:
’>’、’<’、’=’、’>=’、’<=’、’<>’、’(’、’)’、’*’、’.’、’,’
变量名(正则表达式):
[a-zA-Z]([0-9a-zA-Z]|_)*
数据常量(正则表达式):
’true’、’false’、[0-9]+、{[0-9]}*"."{[0-9]}*
采用jLex自动生成词法分析器。
2.语法分析(正规表达式)
SQL语句:
sql:
:
=create
|select
|insert
|delete
|update
|drop
|alter
;
CREATE语句:
create:
:
=CREATETABLENAMELPARcreate_element_commalistRPAR
|CREATEINDEXONNAMELPARNAMERPAR
|CREATEVIEWNAMEASselect
;
create_element_commalist:
:
=create_element
|create_element_commalistCOMMAcreate_element
;
create_element:
:
=NAMEdata_typePRIMARYKEY
|NAMEdata_type
;
data_type:
:
=INT
|FLOAT
|STRING
|BOOLEAN
;
CREATE语句示例:
CREATETABLEtable(IdINTPRIMARYKEY,NameSTRING,
isMaleBOOLEAN,HeightFLOAT
)
CREATEINDEXONtable(Name)CREATEVIEWtableViewAS
SELECT*FROMtable
SELECT语句:
select:
:
=SELECTMULTIfromwhere
|SELECTselect_listfromwhere
;
select_list:
:
=s_attribute
|select_listCOMMAs_attribute
;
s_attribute:
:
=column_name
|column_nameASNAME
;
column_name:
:
=NAME
|NAMEDOTNAME
;
FROM子句:
from:
:
=FROMfrom_list;
from_list:
:
=f_attribute
|from_listCOMMAf_attribute
;
f_attribute:
:
=NAME
|NAMENAME
;
WHERE子句:
where:
:
=orderby
|WHEREsearch_conditionorderby
;
search_condition:
:
=predicate
|search_conditionORsearch_condition
|search_conditionANDsearch_condition
|NOTsearch_condition
|LPARsearch_conditionRPAR
;
predicate:
:
=comparison_predicate
|like_predicate
;
comparison_predicate:
:
=opEQop
|opDYop
|opXYop
|opNEop
|opXDop
|opDDop
;
like_predicate:
:
=column_nameLIKECONTENT
|column_nameLIKECONTENTESCAPECONTENT
;
op:
:
=column_name
|ANYNAME
|ALLNAME
|CONTENT
|INTNUM
|FLOATNUM
|BOOLDATA
|NULL;
orderby:
:
=
|ORDERBYcolumn_name
|ORDERBYcolumn_nameASC
|ORDERBYcolumn_nameDESC
;
SELECT语句示例:
SELECT*FROMtableWHEREName=’koh’ORHeight>1.70
INSERT语句:
insert:
:
=INSERTINTONAMEVALUESLPARi_valuesRPAR
|INSERTINTONAMELPARi_columnsRPARVALUESLPARi_valuesRPAR
;
i_values:
:
=i_value
|i_valuesCOMMAi_value
;
i_value:
:
=CONTENT
|INTNUM
|FLOATNUM
|BOOLDATA
;
i_columns:
:
=NAME
|i_columnsCOMMANAME
;
INSERT语句示例:
INSERTINTOtableVALUES(0,’koh’,true,1.76)
INSERTINTOtable(Id,Name,isMale,Height)VALUES(0,’koh’,true,1.76)
UPDATE语句:
update:
:
=UPDATENAMESETnew_valuesWHEREsearch_condition;
new_values:
:
=new_value
|new_valuesCOMMAnew_value
;
new_value:
:
=NAMEEQCONTENT
|NAMEEQINTNUM
|NAMEEQFLOATNUM
|NAMEEQBOOLDATA
;
UPDATE语句示例:
UPDATEtableSETHeight=1.80WHEREName=’koh’
DELETE语句:
delete:
:
=DELETEFROMNAMEWHEREsearch_condition;
DELETE语句示例:
DELETEFROMtableWHEREName=’koh’
DROP语句:
drop:
:
=DROPTABLENAME
|DROPINDEXNAME
|DROPVIEWNAME
;
DROP语句示例:
DROPTABLEtable
DROPINDEXtableIndexDROPVIEWtableView
ALTER语句:
alter:
:
=ALTERTABLENAMEADDNAMEdata_type
|ALTERTABLENAMEDROPNAME
;
ALTER语句示例:
ALTERTABLEtableADDAgeINT
ALTERTABLEtableDROPAge
3.抽象语法树
当SQL语句经过了词法分析和语法分析后,将SQL语句转化成一个数据库底层可以认识的抽象语法树。
正如语法分析中的正规表达式,每个非终结符都有一个与之对应的类(Java中的Class)或基本类型,在表达式右侧出现的非终结符会作为表达式左侧非终结符对应的类的域之一。
几个重要的树结构:
结构示例:
ROOT{
NODE;NODE;
...
}
CREATE结构:
CreateTable{
tableName;attributeList;
}
CreateIndex{
tableName;columnName;
}
CreateView{
viewName;Select;
}
SELECT结构:
Select{
columnList;fromList;WhereAndOrder;
}
WhereAndOrder{searchConditions;Order;
}
INSERT结构:
Insert{
tableName;columns;values;
}
UPDATE结构:
Update{
tableName;newValues;searchConditions;
}
DELETE结构:
Delete{
tableName;searchConditions;
}
采用javaCup自动生成语法分析器
四、前台设计
1.界面外观
2.各部分功能介绍
》菜单栏
•File
Save:
保存工作区以及当前操作文件Exit:
退出程序
•Edit
Undo:
撤销上一个QueryRedo:
重做最近撤销的一个QueryRefresh:
刷新工作区Delete:
删除所选项目
•Query
Query菜单中所有项目的功能为生成对应的Query语句
•Run
RunQuery:
运行查询对话框中的查询语句
•Window
控制版面布局
LastQueries中存放最近十个Query语句
•Help
显示软件信息
》工具栏
工具栏上的按键功能依次为:
新建(Table、View或Index)保存工作区
撤销上一次Query重做上一次撤销的Query删除所选项目
刷新工作区运行查询文本框中的Query
➢
软件logo
Workspace标签下显示当前工作区中的文件系统,在树型结构中可以通过右键菜单来改变工作区的状态
➢Histroy标签
存放执行的历史记录,用于恢复
➢Query标签
Query标签用于输入用户想要执行的Query,Query标签中可以对
SQL语句的关键字动态着色
Information标签中显示一些对系统的统计信息
➢Console标签
Console标签中为文本框,动态显示系统信息(如错误或成功信息)
➢Result标签
Result标签用来显示Query的结果
➢Operation标签
Operation标签在上面的画面下用于动态修改表或添加新表下方工具栏功能依次为:
标签用于显示信息
TableName用于显示表名或输入表名添加新元组
删除所选元组
在添加新表状态下生成Create语句保存修改或新建的信息
Operation在此种画面下用来新建index
五、系统整合
1.工作区的整合
系统的目录结构由TableMap、IndexMap、ViewMap和RecycleMap组成,在系统启动时,根据这些对象在Workspace标签中画出相应的节点。
系统运行时,一旦工作区发生改变,便刷新工作区。
2.Query记录
为了便于用户使用,系统有一个存放最近10个调用Query的容器,如果用户需要在短时间内重复使用某个Query则可避免重复的手动输入。
3.历史记录
在每个可能更改系统内容的动作执行后,系统都会备份当前内容。
系统记录了最近10次更新前的状态,方便用户可以撤销或重复操作。
历史记录的实现是将工作区备份。
4.数据库的可视化设计和更改
本系统以SQL语言为基础,所有的可视化设计在提交时,都会生成一个SQL语句,然后进行调用。
5.表的动态修改
由于表格控件的限制,在动态修改表格时,无法获取被修改的内容,所以更新表的SQL序列为:
先删除所有原先的元组,然后添加所有当前
元组。
6.语法着色
语法着色靠词法分析器实现。
每当文本框的内容改变时,都会单独调用词法分析器为关键字或常量着色。