Realm for Android基本教程---一个简便的数据库

Realm是一款开源的数据库工具,它具有快速,易于使用和支持多平台的特点.它完全可以取代我们Android中的SQLite数据库,它比SQLite使用起来更加的方便快捷.

添加到项目

想在Android的项目当中使用Realm,只需在依赖文件app/build.gradle下的dependencies节点添加依赖即可

1
compile 'io.realm:realm-android:0.84.1'

创建Realm对象

一个Realm对象就相当于一个SQLite数据库,一旦创建了一个Realm对象在Android的文件系统中就会存在一个与之对应的文件.

1
Realm myRealm = Realm.getInstance(context);

通过Realm.getInstance()方法可以得到一个Realm对象,同时也会在Android文件系统中创建一个名为default.realm的Realm文件.
我们还可以通过RealmConfiguration.Builder对象来创建自己命名的Realm对象

1
2
3
Realm myOtherRealm = Realm.getInstance(new RealmConfiguration.Builder(context)
.name("myOtherRealm.realm")
.build());

创建RealmObject

任何的JavaBean对象只要继承了RealmObject类,都可以被Realm存取访问.

1
2
3
4
5
6
public class Dog extends RealmObject {
private String name;
private int age;

// ... 构造方法和getter(),setter()方法 ...
}

我们还可以为对象属性指定primary key

1
2
3
4
5
6
7
public class Person extends RealmObject {
@PrimaryKey
private long id;
private String name;

// ... Generated getters and setters ...
}

对RealmObject进行操作

要将数据存储到Realm上就需要进行事务操作,下面是一个简单的例子

1
2
3
4
5
6
7
8
9
10
myRealm.beginTransaction();

// Create an object
Dog dog1 = myRealm.createObject(Dog.class);

// Set its fields
dog1.setName("Jack");
dog1.setAge(3);

myRealm.commitTransaction();

从上面的代码可以看到,我们是通过Realm的createObject()方法创建的对象,并不是通过它的构造函数创建的.这是为了让Realm可以管理RealmObject的实例.
如果你想通过构造函数创建对象,最后别忘了使用Realm的copyToRealm()方法将对象与RealmObject关联

1
2
3
4
5
6
7
Dog dog2 = new Dog();
dog2.setName("Mike");
dog2.setAge(6);

myRealm.beginTransaction();
Dog copyOfDog = myRealm.copyToRealm(dog2);
myRealm.commitTransaction();

Realm的查询操作就简单多了,通过使用where()方法关联相应的RealmObject对象,通过findAll()方法便可获取所有的对象,得到的是一个RealmResults的列表对象

1
2
3
4
5
6
7
8
RealmResults<Dog> results1 =
myRealm.where(Dog.class).findAll();

for(Dog d:results1) {
Log.d("results1", d.getName());
}

// Prints Jack, Mike

Realm还提供了很多的查询方法,beginsWith(),endsWith(),lesserThan(),greaterThan()等,这些方法可用于过滤查询得到的结果,若想得到age大于3的Dog对象,我们可以这样操作

1
2
3
4
5
RealmResults<Dog> results2 =
myRealm.where(Dog.class)
.greaterThan("age", 3)
.findAll();
// 得到 Mike

此外还可对得到的结果按属性字段进行排序

1
2
3
RealmResults<Dog> results3 =
myRealm.where(Dog.class)
.findAllSorted("name", false);

传入的boolean值参数代表是正序还是逆序

总结

通过上面的教程已经可以看出Realm的使用非常的简单,如果你想让你的应用拥有数据存取的功能,那Realm是一个不错的选择,想要查看跟多关于Realm的内容,可以查看其官方手册.