1. 程式人生 > >Android SQLite輕量框架LitePal基本使用

Android SQLite輕量框架LitePal基本使用

簡介

LitePal是一個開源的安卓庫,允許程式設計師極其簡單的操作SQLite資料庫。甚至不用寫一句SQL語句就能完成大多數SQLite資料庫操作,包括建立去或者更新表,CRUD操作,聚合操作等等。

特點

  • 使用物件關係對映模型(ORM)。
  • 基本上0配置,僅僅需要一個配置檔案。
  • 自動與表保持聯動(建立、修改或者刪除)。
  • 多資料庫支援。
  • 對SQL語句進行封裝。
  • 簡潔的查詢語句。
  • 同時支援原生API的使用。

配置

  1. 匯入庫

    下載jar檔案或者直接在gradle中引入依賴:

    dependencies {
       compile 'org.litepal.android:core:1.5.1'
    }
  2. 配置litepal.xml檔案

    建立assert資料夾(與res同級),在其中建立litepal.xml檔案,在裡面如下配置:

    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
       <!--
        定義資料庫的名稱,預設情況下需要新增字尾.db,如果沒有新增litepal內部將會自動新增該字尾
       -->
       <dbname value="demo" />
    
       <!--
        定義資料庫的版本,每次你想升級資料庫的時候在此處進行版本號定義.通常當你修改了下面mapping中的model類後需要升級,版本號加一
       -->
    <version value="1" /> <!-- 定義模型類(如同javabean)在mapping標籤中,litepal將會為每個類建立一個表,表中的列將是類中宣告為private的成員.例如: <list> <mapping class="com.test.model.Reader" /> <mapping class="com.test.model.Magazine" /> </list> --> <list> </list
    >
    <!-- 定義資料庫檔案建立在內部儲存還是外部儲存,值為internal或者external 預設為internal 例如: <storage value="external" /> --> <storage value="external" /> </litepal>
  3. 配置LitePalApplication

    為了避免每次使用都需要傳遞Context變數,可以直接在AndroidManifest.xml檔案中使用LitePalApplication.

    <manifest>
       <application
           android:name="org.litepal.LitePalApplication"
           ...
       >
           ...
       </application>
    </manifest>

    如果有自定義的Application,讓它繼承至LitePalApplication即可.然後需要Application的onCreate方法中初始化:

    public class MyOwnApplication extends AnotherApplication {
    
       @Override
       public void onCreate() {
           super.onCreate();
           LitePal.initialize(this);
       }
       ...
    }

使用

  1. 建立表

    定義模型類,假如建立了一個Album類:

    public class Album extends DataSupport {
    
       @Column(unique = true, defaultValue = "unknown")
       private String name;
    
       private float price;
    
       private byte[] cover;
    
       private List<Song> songs = new ArrayList<Song>();
    
       // generated getters and setters.
       ...
    }

    然後在配置檔案litepal.xml檔案中配置:

    <list>
       <mapping class="org.litepal.litepalsample.model.Album" />
    </list>

    之後在你下次操作資料庫時該表自動建立.你就假設該表已經存在,當你開啟,插入資料等操作時litepal檢測到表不存在將會自動建立.

  2. 更新表

    直接對模型類進行修改:

    public class Album extends DataSupport {
    
       @Column(unique = true, defaultValue = "unknown")
       private String name;
    
       @Column(ignore = true)
       private float price;
    
       private byte[] cover;
    
       private Date releaseDate;
    
       private List<Song> songs = new ArrayList<Song>();
    
       // generated getters and setters.
       ...
    }

    這裡添加了一個releaseDate變數(欄位),price變數(欄位)註釋為忽略.

    然後在litepal.xml檔案中更新版本號:

    <!-- 假設之前版本號為1 -->
    <version value="2" ></version>

    表將會在下次對資料庫進行操作時更新,新增一個releaseDate欄位,移除price欄位.

  3. 儲存資料

    繼承自DataSupport的子類將會有save方法,呼叫即可儲存資料到資料庫:

    Album album = new Album();
    album.setName("album");
    album.setPrice(10.99f);
    album.setCover(getCoverImageBytes());
    album.save();
  4. 查詢資料

    查詢單條資料根據id:

    Album album = DataSupport.find(Album.class, id);

    條件查詢:

    //注意問號
    List<Album> albums = DataSupport.where("name=?", "fantasy").order("price").find(Album.class);
  5. 更新資料

    查詢到資料取得模型類的物件,呼叫set方法修改後呼叫save儲存即可.

    Album albumToUpdate = DataSupport.find(Album.class, 1);
    albumToUpdate.setPrice(20.99f); // raise the price
    albumToUpdate.save();
  6. 刪除資料

    和查詢資料用法類似.

    根據id刪除單條資料:

    DataSupport.delete(Song.class, id);

    刪除所有資料:

    DataSupport.deleteAll(Song.class, "duration > ?" , "350");
  7. 非同步操作

    當操作的資料量過大時可能需要非同步操作避免當前執行緒阻塞,litepal支援所有CRUD操作方法非同步操作.(都有對應的async方法)

    例如:

    DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
       @Override
       public <T> void onFinish(List<T> t) {
           List<Song> allSongs = (List<Song>) t;
       }
    });

    如果需要的話,呼叫listen方法新增該操作的監聽器.