Android开发中常用的数据库有5个:
GreenDAO小于100KB,所以对于应用程序APK的大小影响很小。
相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。
Ream提供了五种编程方式的实现。分别是Java,Objective
 C,Swift,React-Native,tamarin。在这里我着重介绍在Android中的使用。
大家可以直接看官方的文档,我也是在这基础的上讲解:realm使用
快速入门:
第一步: 在项目的 build.gradle 文件中添加如下 class path 依赖。
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:1.0.0"
    }
}
项目的 build.gradle 文件在如下位置:
第二步: 在 app 的 build.gradle 文件中应用 realm-android 插件。
apply plugin: ‘realm-android‘
app的 build.gradle 文件在如下位置:
说到这里,我们已经迫不及待的想尝试下了。
1,application里面初始化
public class RealmApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        init();
    }
    private void init() {
        RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();
        Realm.setDefaultConfiguration(realmConfiguration);
    }
}public class RealmUtils {
    private static  RealmUtils instance;
    public final Context mContext;
    private String realmName = "realm_demo.realm";
    public RealmUtils(Context mContext) {
        this.mContext = mContext;
    }
    public  static  RealmUtils getInstance(Context context){
        if (instance == null) {
            synchronized (RealmUtils.class) {
                if (instance == null) {
                    instance = new RealmUtils(context);
                }
            }
        }
        return  instance;
    }
    public  Realm getRealm(){
        Realm realm =Realm.getInstance(new RealmConfiguration.Builder(mContext).name(realmName).build());
        return  realm;
    }
}3,创建一个realmObject对象,存储object
例如,我们现在需要存储一个人(Person)对象,注意,这里的成员属性为了realm的序列化,都写成私有的
public class Person extends RealmObject {
    @PrimaryKey
    private String code;//编号
    private String name;//姓名
    private int age;//年龄
    public Person() {
    }
    public Person(int age, String code, String name) {
        this.age = age;
        this.code = code;
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "code='" + code + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}public interface PersonDao {
    //插入
    void insert(Person person) throws Exception;
    //查询
    List<Person> getAllPerson() throws Exception;
    //更新
    Person updatePerson(Person person) throws Exception;
    //删除
    void deletePerson(String code) throws Exception;
    //    异步插入
    void insertPersonAsync(Person person) throws Exception;
}5,对象的具体实现
public class PersonDaoImpl implements PersonDao {
    private Context context;
    private Realm mRealm;
    public PersonDaoImpl(Context context){
        mRealm = RealmUtils.getInstance(context).getRealm();
    }
    @Override
    public void insert(Person person) throws Exception {
        mRealm.beginTransaction();
        Person person1 = mRealm.copyToRealm(person);
        mRealm.commitTransaction();
        mRealm.close();
    }
    @Override
    public List<Person> getAllPerson() throws Exception {
        List<Person> mlist = null;
        mlist =  mRealm.where(Person.class).findAll();
        mRealm.close();
        return mlist;
    }
    @Override
    public Person updatePerson(Person person) throws Exception {
        mRealm.beginTransaction();
        Person person1 = mRealm.copyToRealmOrUpdate(person);
        mRealm.commitTransaction();
        mRealm.close();
        return  person1;
    }
    @Override
    public void deletePerson(String code) throws Exception {
        Person person = mRealm.where(Person.class).equalTo("code",code).findFirst();
        mRealm.beginTransaction();
        person.deleteFromRealm();
        mRealm.commitTransaction();
    }
    @Override
    public void insertPersonAsync(final Person person) throws Exception {
        //一个Realm只能在同一个线程中访问,在子线程中进行数据库操作必须重新获取Realm对象:
        mRealm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                realm.beginTransaction();
                Person person1 = realm.copyToRealm(person);
                realm.commitTransaction();
                realm.close();//并且要记得在离开线程时要关闭 realm.close();
            }
        });
        //关闭Realm对象
        mRealm.close();
    }
}public class MainActivity extends AppCompatActivity {
    private Realm mRealm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init() {
        Person person = new Person();
        person.setName("测试");
        person.setAge(28);
        person.setCode("xxxx");
        PersonDao dao = new PersonDaoImpl(this);
        try {
            //增加
            dao.insert(person);
             //查询全部
            dao.getAllPerson();
            //指定code删除
            dao.deletePerson("xxxx");
            //更新
            dao.updatePerson(person);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
原文:http://blog.csdn.net/xiangzhihong8/article/details/52130018