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
3Realm myOtherRealm = Realm.getInstance(new RealmConfiguration.Builder(context)
.name("myOtherRealm.realm")
.build());
创建RealmObject
任何的JavaBean对象只要继承了RealmObject
类,都可以被Realm存取访问.1
2
3
4
5
6public class Dog extends RealmObject {
private String name;
private int age;
// ... 构造方法和getter(),setter()方法 ...
}
我们还可以为对象属性指定primary key
1
2
3
4
5
6
7public class Person extends RealmObject {
private long id;
private String name;
// ... Generated getters and setters ...
}
对RealmObject进行操作
要将数据存储到Realm上就需要进行事务操作,下面是一个简单的例子1
2
3
4
5
6
7
8
9
10myRealm.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
7Dog 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
8RealmResults<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
5RealmResults<Dog> results2 =
myRealm.where(Dog.class)
.greaterThan("age", 3)
.findAll();
// 得到 Mike
此外还可对得到的结果按属性字段进行排序1
2
3RealmResults<Dog> results3 =
myRealm.where(Dog.class)
.findAllSorted("name", false);
传入的boolean
值参数代表是正序还是逆序
总结
通过上面的教程已经可以看出Realm的使用非常的简单,如果你想让你的应用拥有数据存取的功能,那Realm
是一个不错的选择,想要查看跟多关于Realm
的内容,可以查看其官方手册.