Android通過xml檔案設定資料庫

來源:互聯網
上載者:User

標籤:

     之前一段時間自己封裝了兩個資料庫,一個是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裡面。

         後面會講如何通過這些解析出來的資訊構建資料庫資訊。

Android通過xml檔案設定資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.