说在前头:本篇文章主要是记录这次项目的过程,不全是贴代码,具体的程序移步这里,不喜欢的同学请轻喷。
事件起因:大三狗一枚,专业是软件应用。这学期的中级软件设计实作题目是实现一个小型的数据库,具体的题目要求如下:
建立一个类似Oracle\SQL Server的小型数据库系统:
- 可建立表,表有字段、类型
- 表中可通过SQL语句填入数据(只能是特定类型)和查询数据;
- 对主键字段,应自动建立索引;
- 当进行查询时,在主键上应是基于索引的高效查询,而不能是字符串匹配这样的原始查询。
觉得题目似曾相识的同学,应该猜到我是哪所大学的了吧。一番Google、百度下来,最终确定了实现成一个Android的应用,毕竟这学期刚学的Android,这知识还滚烫着呢,而且Android的各种框架已经很成熟了,不用重复造轮子了。
前期准备:既然需求已经如此明确,接下来就是进行界面设计。然而自己并没有高大上的审美,也没有美术的基础,所以并不敢有太高的要求,但是业务逻辑要通顺,其他只能说长得不丑就行了。我用的是Mac系统下的一个Sketch的软件绘制的原型图,在这里就不贴出来了,具体的应用界面下面有。
接下来就是技术准备了,实现一个小型数据库,我总结了以下几点主要的技术难点:
- 首先是主流数据库系统的实现原理;我主要参看了以下链接的内容:数据库的最简单实现、数据库索引的实现原理、为什么要用B+树结构——MySQL索引结构的实现等等技术博客,感谢各位无私奉献的大牛们~
- 其次也是最难的部分是B+树,当前的很多数据库系统都是用B+树。关于B+树的总结,可以参看我的另一篇博客。
- 最后就是Android的相关知识。这个需要长期的积累,遇到不会的我都会Google,或者查看技术博客,stackoverflow,github等等也有很多轮子可以直接用。
实际编码:终于来到真正的打大怪阶段了。这一部分内容我直接按界面(Activity)进行划分。
- 主界面(Main Activity):首先是界面展示
主界面上就是所有已经建好的表的列表,点击列表项则弹出对话框进行删除表、添加数据、查询数据操作,这三个操作具体实现在后面会详细说;其次右上角是新建表的按钮,点击跳转到对应的界面。主界面逻辑都很简单,值得一提的是刷新列表的操作我是放在onResume函数中,所以每次进入主界面就会刷新列表。代码片段如下:
@Override
protected void onResume()
{
super