安卓日记——Realm迅速上手

Realm作为一种新兴的数据库以其变态的进度吸引了大家,摆图看看它有多快

这边写图片描述

力压主流Sqlite,所以读书Realm就很有必不可少了

1.在档次的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设为Realm类型的全局变量因为最后要把它倒闭掉
本身这里只介绍最简易的主意,至于配置表名,表的本子这里不详细介绍

4.注解先导事务

        realm.beginTransaction();
        //TODO
        realm.commitTransaction();

始发前要beginTransaction,停止后要commitTransaction
可是还有此外两种艺术

先是种共同实施

realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    //TODO         
                }
            });

其次种异步执行

                realmAsyncTask=realm.executeTransactionAsync(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                //TODO
                }

            });

缘何要重回一个
RealmAsyncTask的值吗,因为如果你在跳转Activity之后想中止这一个进程则要把realmAsyncTask
关掉,就像网络请求一样。

5.新建实体

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;
    }
}

实体必须是持续自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()

若想结果排序,可将findall换成findAllSorted

        //结果对poppulation升序排序
        RealmResults<Country> results3 =
                realm.where(Country.class)
                        .findAllSorted("population", Sort.ASCENDING);

淌假若降序则要把Sort.ASCENDING换成Sort.DESCENDING**

8.删除

无论删除和修改都是基于查询语句的

        realm.beginTransaction();
        //删除查询到的所有项
        results3.deleteAllFromRealm();
        //删除查询到的location为2的项
        results3.deleteFromRealm(2);
        //删除查询到的第一项
        results3.deleteFirstFromRealm();
        //删除查询到的最后一项
        results3.deleteLastFromRealm();
        realm.commitTransaction();

9.修改

        realm.beginTransaction();
        //将loacation为0的项的population改为13000000
        Country mCountry=results3.get(0);
        mCountry.setPopulation(13000000);
        realm.commitTransaction();

总结

Realm尽管速度快,但她的扩张性不及实际sqlite的库,导致有些人不希罕用,这世界上并不曾完善的事物,至于你们怎么取舍就看你们自己的选料吧

网站地图xml地图