Android通过xml文件配置数据库

     之前一段时间自己封装了两个数据库,一个是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里面。

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。