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里面。

         后面會講如何通過這些解析出來的信息構建數據庫信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM