SQlite數據庫框架:LitePal

常用的數據庫框架

Android的發展的速度是難以置信的,Android出來哪一年我還在小學上學很,還能很清楚的記得,那年一切,但是那個時候的我怎麼可能也不會想到自己將來會要去做Android.Android數據庫的框架很多,選擇自己喜歡的,不用掌握很多,選擇自己喜歡的就好.

Sugar&GreenDao&Afinal&ORMLite&Realm&LiteOrm&DBFlow&ActiveAndroid&LitePal

  • SugarORM 是對象關係映射模式。不用寫複雜的sql語句,而用簡單的API即可完成創建和操縱數據;可以在原有的Bean上僅僅添加小的修改而複用Bean;簡化而明瞭的數據庫設計和創建過程,同時提供表的一對多的支持。

  • GreenDao 是爲Android設計的對象關係映射(ORM)工具。它提供了對象到關係型數據庫SQLite的相應接口。爲了在Android工程中使用greenDao,需要創建另一個“生成器”工程,它的任務是在你的工程域裏生成具體的代碼。因此相比與其它ORM框架具有出衆性能。

  • Afinal 是一個android的sqlite orm 和 ioc 框架。同時封裝了android中的http框架,使其更加簡單易用。FinalDB模塊,android中的orm框架,一行代碼就可以進行增刪改查。支持一對多,多對一等查詢。

  • ORMLite (Object Relational Mapping Lite)提供了一些輕量級持久化Java對象到SQL數據庫,同時也避免了複雜性和更多的標準的ORM包的開銷功能。它支持的SQL數據庫使用JDBC的數量,還支持原生的Android操作系統數據庫API調用sqlite。

  • Realm 是用來替代sqlite的一種解決方案,它有一套自己的數據庫存儲引擎,比sqlite更輕量級,擁有更快的速度,並且具有很多現代數據庫的特性,比如支持JSON,流式api,數據變更通知,自動數據同步,簡單身份驗證,訪問控制,事件處理,最重要的是跨平臺,目前已有Java,Objective C,Swift,React-Native,Xamarin這五種實現。

  • LiteOrm 是android上的一款數據庫(ORM)框架庫。速度快、體積小、性能高。開發者基本一行代碼實現數據庫的增刪改查操作,以及實體關係的持久化和自動映射。設計原則:輕量、專注、性能優先、線程無關,專注數據及其關係存儲和操作;無需工具輔助,不需要無參構造,不需要繁多註解,約定優於配置;使用極致簡約,例如:db.save(u); db.query(U.class); db.deleteAll(U.class);。

  • DBFlow 綜合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等庫的優點。同時不是基於反射,所以性能也是非常高,效率緊跟greenDAO其後。基於註解,使用apt技術,在編譯過程中生成操作類,使用方式和ActiveAndroid高度相似,使用簡單。無縫支持多個數據庫,使用annotation processing提高速度,ModelContainer類庫可以直接解析像JSON這樣的數據,增加靈活性的豐富接口。

  • ActiveAndroid 是採用活動記錄(Active Record)架構模式設計的適用於Android平臺的輕量級ORM架構

  • LitePal 是對象關係映射(ORM)模型。它使開發者使用SQLite數據庫變得非常容易。 你可以不用寫一句SQL語句就可以完成大部分數據庫操作,包括創建表,更新表,約束操作,聚合功能等等。

 

LitePal

  • LitePal的集成和簡單的使用

  • LitePal中實現增刪改查

  • LitePal一些常用的API介紹

 

LitePal的集成和簡單的使用

引入相應的類庫

compile 'org.litepal.android:core:1.6.1'

這個可以去項目源碼中找到最新的類庫

創建相應的litepal.xml文件

首先這個文件是在相應的assets文件夾下(創建方法爲項目文件夾下New->Folder->Assets Folder就可以創建相應的assets文件夾了),然後在assets文件夾下創建一個相應的litepal.xml文件夾,下面是具體的內容:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="file"/>
    <version value="1"/>
    <list>
        <mapping class="com.hejin.download.FileInfo"/>
    </list>
</litepal>

這裏說明幾點問題:

  • dbname標籤是相應的數據庫名稱

  • version標籤是相應的數據庫的版本,這裏注意當裏面引用的內容發生改變的時候,要升級相應的版本

  • list標籤是那些對象需要數據庫管理,這裏注意mapping裏面的路徑一定要是全路徑名稱

  • 這裏面list標籤中的實體類都應該繼承DataSupport這個類,這個千萬別忘記

更換繼承的Application

這裏其實份兩種情況:

  • 已經有繼承的Application

  • 直接繼承LitePalApplication

爲什麼分爲這兩種情況呢?因爲有的項目中可能之前實現Application已經繼承了一個其他類型的Application了,那麼這個時候因爲java的單繼承,所以這裏就不能直接繼承LitePalApplication了,但是LitePal已經幫我們想到這個問題了,所以說下面我們分兩種情況實現一下:

  • 第一種

直接在相應項目中的Application中的onCreat()方法中初始化一下就可以了,像下面這樣:

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }

這樣你的Application可以隨便繼承其他的Application

在manifest.xml中引入相應的Application,也就是你之前的Application

  • 第二種

直接繼承相應的LitePalApplication這裏就不用在onCreat()中調用LitePal.initialize(this);這個方法了;

這個就比較特殊了要在相應的application標籤中添加Application的時候要這樣寫android:name="org.litepal.LitePalApplication"

 

LitePal中實現CRUD(增刪改查)

LitePal添加數據

關於相應的增加操作,這裏主要是通過對象的save()進行的,怎麼說呢?其實你只要給相應的類添加了相應的集體參數然後調用相應的save()方法就可以了.具體代碼如下:

        LitePalBean zhangSanBean = new LitePalBean("張三", "20", "男");
        zhangSanBean.save();
        LitePalBean liSiBean = new LitePalBean("李四", "25", "男");
        liSiBean.save();

這樣就形成了相應的數據庫的表結構了,也就是有了相應的數據庫了,但是如果你在手機上調試的不Root的話是看不到的.這裏說明一個問題添加相同的內容是可以添加進去的

LitePal刪除數據

關於刪除數據的操作,這裏主要是通過對象的delete()或者deleteAll()進行刪除,具體代碼如下:

        /*這裏就是刪除所有名字是張三的*/
        DataSupport.deleteAll(LitePalBean.class, "name =?", "張三");

        LitePalBean zhangSanBean = new LitePalBean("張三", "20", "男");
        zhangSanBean.save();
        zhangSanBean.delete();

這裏刪除的兩種方式:

  • 直接對象刪除:也就是對象直接調用delete();方法進行;

  • 根據類型進行刪除,其實這裏就是相當於SQLite進行刪除,這裏有必要說明一下第二個語句傳入內容如果爲"name=?"代表的是所有name爲後面字段的內容,也就是所有名字爲張三的內容都會刪除.那麼你會問了如果這裏面我傳入兩個內容呢?比如"name=? and age=?"對沒錯,就是用and進行連接

LitePal更新數據

這裏其實很簡單,就是更改完相應的數據直接save保存就可以了,代碼如下:

        LitePalBean zhaoWuBean = new LitePalBean("趙五", "25", "男");
        zhaoWuBean.save();
        zhaoWuBean.setAge("30");
        zhaoWuBean.save();

這裏有一個問題,感覺應該是先取出來這個對象在進行操作纔對,才能確保內容的正確性.

LitePal查詢方法

關於查詢數據的操作,主要用到find()和findAll()等相應的方法,具體代碼如下:

   List<LitePalBean> all = DataSupport.findAll(LitePalBean.class);
        for (int i = 0; i < all.size(); i++) {
            Log.e(TAG, "query: " + all.get(i).toString());
        }
    }

 

LitePal常用的API

  • DataSupport.findFirst(XXX.class)
    查詢XXX列表中的第一個元素

  • DataSupport.findLast(XXX.class)
    查詢XXX列表中的最後一個元素

  • DataSupport.select()
    根據SQLite中的關鍵字進行查找,例如DataSupport.select("name","age").find(XXX.class) 查詢的是相應名字和年齡的兩列數據 其他的數據是查不出來的.

  • DataSupport.where()
    相當於SQLite中的where關鍵字查找,這裏還是舉個例子->DataSupport.where("name=?","張三").find(XXX.class) 查詢的是所有名字爲張三的數據內容;

  • DataSupport.order()
    相當於SQLite中的order關鍵字查找,主要是排序方式,這裏還是舉個例子->DataSupport.order(price desc).find(XXX.class) 這裏面是按照降序進行排列的;desc標識降序排列,**asc
    **代表升序排列

  • DataSupport.limit()
    查詢數據庫的結果的數量 例子->DataSupport.limit(3).find(XXX.class); 查詢3條數據

  • DataSupport.offset()
    查詢制定結果的偏移量 例子(我想查詢第二條第三條和第四條)-> DataSupport.limit(3).offset(1).find(XXX.class); 這裏是從第一條開始,但是不包含相應的第一條

 

 

 

 

 

 

                                                                                                                                 by .k

 

關注"編程v",每一天漲一點

STAY HUNGRY & STAY FOOLISH

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章