Realm作為一種新興的數(shù)據(jù)庫以其變態(tài)的速度吸引了我們,擺圖看看它有多快

這里寫圖片描述
力壓主流Sqlite,所以學(xué)習(xí)Realm就很有必要了
1.在項(xiàng)目的build.gradle=>buildscript=>dependencies添加
classpath "io.realm:realm-gradle-plugin:1.0.1"
添加后效果如下
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
classpath "io.realm:realm-gradle-plugin:1.0.1"
}
}
2.在moudle的build.gradule里頭部添加
apply plugin: 'realm-android'
3.開始使用Realm
RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).build();
Realm.setDefaultConfiguration(realmConfig);
realm=Realm.getDefaultInstance();
最好把realm設(shè)為Realm類型的全局變量因?yàn)樽詈笠阉P(guān)閉掉
我這里只介紹最簡(jiǎn)單的方法,至于配置表名,表的版本這里不詳細(xì)介紹
4.聲明開始事務(wù)
realm.beginTransaction();
//TODO
realm.commitTransaction();
開始前要beginTransaction,結(jié)束后要commitTransaction
不過還有另外兩種方式
第一種同步執(zhí)行
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//TODO
}
});
第二種異步執(zhí)行
realmAsyncTask=realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//TODO
}
});
為什么要返回一個(gè) RealmAsyncTask的值呢,因?yàn)槿绻阍谔D(zhuǎn)Activity之后想中止這個(gè)過程則要把realmAsyncTask 關(guān)掉,就像網(wǎng)絡(luò)請(qǐng)求一樣。
5.新建實(shí)體
public class Country extends RealmObject {
private String name;
private int population;
public Country() { }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPopulation() {
return population;
}
public void setPopulation(int population) {
this.population = population;
}
}
實(shí)體必須是繼承自RealmObject
6.增加
realm.beginTransaction();
Country country=realm.createObject(Country.class);
country.setPopulation(1000000);
country.setName("China");
realm.commitTransaction();
7.查詢
RealmResults<Country>realmResults =realm.where(Country.class).findAll();
支持以下幾種條件查詢
- between()、greaterThan()、lessThan()、greaterThanOrEqualTo() 和
lessThanOrEqualTo() - equalTo() 和 notEqualTo()
- contains()、beginsWith() 和 endsWith()
- isNull() 和 isNotNull()
- isEmpty() 和 isNotEmpty()
- or()和and()
- not()
若想結(jié)果排序,可將findall換成findAllSorted
//結(jié)果對(duì)poppulation升序排序
RealmResults<Country> results3 =
realm.where(Country.class)
.findAllSorted("population", Sort.ASCENDING);
如果是降序則要把Sort.ASCENDING換成Sort.DESCENDING**
8.刪除
無論是刪除和修改都是基于查詢語句的
realm.beginTransaction();
//刪除查詢到的所有項(xiàng)
results3.deleteAllFromRealm();
//刪除查詢到的location為2的項(xiàng)
results3.deleteFromRealm(2);
//刪除查詢到的第一項(xiàng)
results3.deleteFirstFromRealm();
//刪除查詢到的最后一項(xiàng)
results3.deleteLastFromRealm();
realm.commitTransaction();
9.修改
realm.beginTransaction();
//將loacation為0的項(xiàng)的population改為13000000
Country mCountry=results3.get(0);
mCountry.setPopulation(13000000);
realm.commitTransaction();
總結(jié)
Realm雖然速度快,但他的擴(kuò)展性不及其實(shí)sqlite的庫,導(dǎo)致有些人不喜歡用,這世界上并沒有完美的東西,至于你們?cè)趺催x擇就看你們自己的取舍吧