之前一段时间自己封装了两个数据库,一个是ORM数据库,另一个是事件流数据库,项目相应的地址如下:

ORM数据库:https://github.com/wenjiang/SimpleAndroidORM

事件流数据库:https://github.com/wenjiang/EventStreamDB

有兴趣的人可以上去看看。

如果要讲这两个项目,一篇文章的篇幅是放不下的,所以就只是每篇都只讲一点点。

两个自己写的数据库都有一个必须用到的地方:在xml文件中配置数据库。

利用文件配置数据库在很多语言的框架中都有提供,因为这是一个很方便的特性:只要在一个地方对数据库进行配置,不用牵扯到具体的代码,可维护性更高。

在Android中,能想到的就是利用xml文件。

理论上,这个xml文件可以放在任何文件夹,但最好是放在assets文件夹内,因为这个文件夹内的文件是只读的,像是这种配置性文件当然是只读的。

现在我们就来规定这个xml文件内的东西。

我们在assets文件夹内创建一个database.xml文件,该文件就是数据库的配置文件。

xml文件可以允许我们自己定义标签,只要我们有对应的xml解析器就行。

对于数据库的配置,常见的有三种:数据库名字,版本和表。

database.xml文件的内容如下:

当然,这些标签都可以自己定义,像是mapping就可以改为table,但如果某些标签是一组的,最好就是放进list标签里,这样方便xml解析器解析。

现在我们有了自己的xml文件,可以开始编写xml解析器了。

首先是读取assets下的database.xml文件。

Android提供了assets文件夹的读取方法:

InputStream in = null;try{
in=context.getResources()
.getAssets().open("database.xml");
}catch(IOException e) {throw new BaseSQLiteException("database.xml is not exist");
}

Android 中读取系统文件或者资源的时候,都可以通过getResources方法获取到Resources对象,然后通过这个对象获取到相应的资源。

得到database.xml文件的InputStream之后,就可以开始读取文件内容了。

读取xml文件可以利用XmlPullParserFactory这个类。

XmlPullParserFactory factory;try{

factory=XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp=factory.newPullParser();
xpp.setInput(in,"UTF-8");int evtType =xpp.getEventType();//一直循环,直到文档结束
while (evtType !=XmlPullParser.END_DOCUMENT) {switch(evtType) {caseXmlPullParser.START_TAG:
String tag=xpp.getName();if (tag.equals("dbname")) {
dbName= xpp.getAttributeValue(0);
}else if (tag.equals("version")) {
version= Integer.valueOf(xpp.getAttributeValue(0));
}else if (tag.equals("mapping")) {
tableSet.add(xpp.getAttributeValue(0));
}break;caseXmlPullParser.END_TAG:break;default:break;
}//获得下一个节点的信息
evtType =xpp.next();
}
}catch(Exception e) {
LogUtil.e(e.toString());
}finally{
List tableList = new ArrayList();for(String table : tableSet) {
tableList.add(table);
}

我们前面定义的xml文件是DOM格式的xml文件,所以需要检验该xml文件是否合法,否则就可能发生解析失败。检验的方法就是设置setNamespaceAware为true。

现在我们已经解析xml文件,并将相应的节点信息放在tableList里面。

后面会讲如何通过这些解析出来的信息构建数据库信息。