之前一段时间自己封装了两个数据库,一个是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文件的内容如下:

<?xml version="1.0" encoding="utf-8"?><database>    <!-- 数据库名称 -->    <dbname value="zwb.db"></dbname>    <!-- 数据库版本 -->    <version value="1"></version>    <!-- 数据库表 -->    <list>        <mapping class="com.zwb.args.dbpratice.model.Status"></mapping>        <mapping class="com.zwb.args.dbpratice.model.User"></mapping>    </list></database>

当然,这些标签都可以自己定义,像是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) {                    case XmlPullParser.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;                    case XmlPullParser.END_TAG:                        break;                    default:                        break;                }                //获得下一个节点的信息                evtType = xpp.next();            }        } catch (Exception e) {            LogUtil.e(e.toString());        } finally {            List<String> tableList = new ArrayList<String>();            for (String table : tableSet) {                tableList.add(table);            }

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

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

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

更多相关文章

  1. Android打包签名——生成keystore到完成签名
  2. android内核读取file文件
  3. Android(安卓)-- 使用主题配置文件,去掉程序启动界面的短暂黑屏
  4. 内容为引用别人的文章,备自己学习之用.
  5. Android(安卓)深入解析AsyncTask(doInBackground不工作)
  6. android 数据库 sqlite数据类型(时间 日期 double等)
  7. Android(安卓)数据库 DB简单操作
  8. 自己的android keystore 提示密钥库文件不存在
  9. Android获取assets目录下的文件和图片

随机推荐

  1. Android安全加密:Https编程
  2. 在Android(安卓)Studio中下载Android(安
  3. Android:解决RadioGroup中RadioButton的图
  4. Android开发EditText属性
  5. 安卓课程九 布局属性说明
  6. android aidl 进程通信 调用错误
  7. Android异步处理四:AsyncTask的实现原理
  8. Android-0.Android(安卓)Studio布局中Rel
  9. Android:控件布局(相对布局)RelativeLayout
  10. Android异步处理三:Handler+Looper+Messag