前言
正好項目用了這種數(shù)據(jù)存儲方式,特地寫一篇加深印象,在我看來,LitePal是使用最簡單,集成最方便的數(shù)據(jù)庫,沒有之一。
LitePal 簡介
LitePa它采用了對象關系映射(ORM)的模式,將我們平時使用的一些數(shù)據(jù)庫(比如 Sqlite)功能進行了封裝。
配置
第一步
gradle注入:
compile 'org.litepal.android:core:1.6.1'
這里我的版本是1.6.1的,如果想獲得最新版本,請看這里:https://github.com/LitePalFramework/LitePal
第二步
接著需要配置 litepal.xml 文件,在 app/src/main 目錄右鍵 -> New -> Directory , 創(chuàng)建一個 assets 目錄,在該目錄下新建一個 litepal.xml 文件,編輯內容如下:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="hskj_user" />
<version value="1" />
<list></list>
</litepal>
說明: <dbname>用于設定數(shù)據(jù)庫的名字,可以隨便起名,我這里是hskj_user,<version>用于設定數(shù)據(jù)庫的版本號,<list>用于設定所有的映射模型,我們稍后就會用到。
第三步
配置 LitePalApplication,這里有2種方法:
①如果項目的Application沒有繼承其他的Application,可以按照下面方式寫:
public class MyApplication extends LitePalApplication {
...
}
②由于我的項目集成了MultiDexApplication,如下:
所以我選擇了第二種方式配置,在application中的onCreate()配置
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
經(jīng)過上面的步驟已經(jīng)將 LitePal 配置完成,接下里開始建表:
import org.litepal.crud.DataSupport;
/**
* Created by zjp on 2018/1/16 16:22.
*/
public class TestEntity extends DataSupport {
private int id;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
其實這就是一個 JavaBean ,定義了兩個簡單的屬性,其中id這個字段可寫可不寫,因為即使不寫這個字段,LitePal也會在表中自動生成一個id列,畢竟每張表都一定要有主鍵的。
建好了表之后,接下來還需要將它添加到我們的模型列表中:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="hskj_user" />
<version value="1" />
<list>
<mapping class="com.example.zjp.litepaldemo.bean.TestEntity"></mapping>
</list>
</litepal>
現(xiàn)在我們就可以測試了,啟動一個 Activity ,我這里只添加了一個按鈕,在其點擊事件下寫下面一句代碼:
LitePal.getDatabase();
等運行成功之后,可以打開Android Device Monitor查看是否創(chuàng)建成功了。如圖:
可以看到剛剛成功創(chuàng)建的hskj_user數(shù)據(jù)庫了。
這里我暫時只演示下數(shù)據(jù)存儲和刪除吧,可以在自己工程中新建一個類,來對LitePal數(shù)據(jù)庫操作,我是這樣寫的:
/**
* Created by zjp on 2018/1/12 10:01.
*/
public class SearchHistroyDao {
/**
* 獲取所有頻道
*
* @return
*/
public static List<TestEntity> getChannels() {
return DataSupport.findAll(TestEntity.class);
}
/**
* 保存年齡關鍵字
*/
public static void saveHistoryKeyword(int ageVal) {
if (ageVal == 0) return;
TestEntity testEntity = new TestEntity();
testEntity.age = ageVal;
testEntity.save();
}
/**
* 清空所有頻道
*/
public static void cleanChanels() {
DataSupport.deleteAll(TestEntity.class);
}
}
增
調用SearchHistroyDao.saveHistoryKeyword()可以成功保存數(shù)據(jù)
不過還有另一種方法(不推薦)
//ContentValues cv = new ContentValues();
//cv.put("age", 25);
//db.insert("TestEntity", null, cv);
然后在你要保存數(shù)據(jù)的時候,調用SearchHistroyDao.saveHistoryKeyword(*),就能成功保存數(shù)據(jù)庫
刪除所有數(shù)據(jù)時候調用:SearchHistroyDao.cleanChanels()即可。好了,LitePal數(shù)據(jù)講解完成。