android Realm数据操作类详解
来源:互联网 发布:js不区分大小写 编辑:程序博客网 时间:2024/06/03 16:50
在这篇快速入门教程中,你将学到Android版Realm的基础知识。本教程我们使用的是Realm v0.84.1
1. 添加Realm到工程
要在安卓工程中使用Realm,你需要在module的build.gradle文件中添加一个依赖:
compile 'io.realm:realm-android:0.84.1'
2. 创建一个Realm
一个Realm相当于一个SQLite数据库。它有一个与之对应的文件,一旦创建将持久保存在安卓的文件系统中。
要创建一个新的Realm,你可以在任意Activity中调用静态方法Realm.getInstance。
Realm myRealm = Realm.getInstance(context);
注意,调用Realm.getInstance,而没有传入RealmConfiguration,会创建一个叫做 default.realm的Realm文件。
如果你想向app中添加另一个Realm,必须使用一个RealmConfiguration.Builder对象,并为Realm 文件指定一个独有的名字。
Realm myOtherRealm =
Realm.getInstance(
new RealmConfiguration.Builder(context)
.name("myOtherRealm.realm")
.build()
);
3. 创建一个RealmObject
只要继承了RealmObject类,任意JavaBean都能存储在Realm中。不知道JavaBean是什么?它就是一个可序列化的java类,有默认构造器,成员变量有相应的getter/setter方法。比如,下面这个类的实例就能轻松的存储在一个Realm中:
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的一个成员变量作为主键,你可以使用@PrimaryKey注解。比如,这里演示了如何为Country类添加一个主键code:
@PrimaryKey
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
4. 创建transaction
虽然从一个Realm读取数据非常简单(下一节有讲),但是向它写入数据就稍微复杂一点。Realm遵循 ACID (数据库事务正确执行的四个基本要素的缩写)规范,为了确保原子性和一致性,它强制所有的写入操作都在一个事务中执行。
要开始一个新的事务,使用beginTransaction方法。类似地,要结束这个事务,使用commitTransaction方法。
注:事务即英文里面的transaction。
这里演示了如何创建和保存一个Country类的实例:
myRealm.beginTransaction();
// Create an object
Country country1 = myRealm.createObject(Country.class);
// Set its fields
country1.setName("Norway");
country1.setPopulation(5165800);
country1.setCode("NO");
myRealm.commitTransaction();
你可能注意到了country1并不是用Country类的构造器创建的。对于一个Realm来说,管理一个RealmObject的实例,这个实例必须用createObject方法创建。
如果你必须使用构造器,别忘了在提交事务前使用相关Realm对象的copyToRealm方法。这里是示例:
// Create the object
Country country2 = new Country();
country2.setName("Russia");
country2.setPopulation(146430430);
country2.setCode("RU");
myRealm.beginTransaction();
Country copyOfCountry2 = myRealm.copyToRealm(country2);
myRealm.commitTransaction();
注:copyToRealm方法还有一个很重要的作用就是可以把已经存在的对象直接拷贝进Realm数据库。
5. 书写查询
Realm为创建查询提供了一套非常直观和流式的API。要创建一个查询,使用相关Realm对象的where方法并传入你感兴趣的对象的类。创建完查询之后,你可以使用返回一个RealmResults对象的findAll方法获取所有的结果,findAll。在下面的例子中,我们获取并打印Country的所有对象:
RealmResults<Country> results1 =
myRealm.where(Country.class).findAll();
for(Country c:results1) {
Log.d("results1", c.getName());
}
// Prints Norway, Russia
Realm提供了几个命名非常贴切的方法,比如beginsWith, endsWith,lesserThan 和 greaterThan,可以用来过滤,筛选结果。下面的代码演示了如何使用greaterThan方法来获取population(人口)大于1亿的Countryobjects:
RealmResults<Country> results2 =
myRealm.where(Country.class)
.greaterThan("population", 100000000)
.findAll();
// Gets only Russia
如果你想查询结果被归类,你可以使用findAllSorted方法。在它的参数中,用一个String指定被归类field的名字,并用一个boolean指定归类顺序。
// Sort by name, in descending order
RealmResults<Country> results3 =
myRealm.where(Country.class)
.findAllSorted("name", false);
// Gets Russia, Norway
总结
在这篇快速入门中,你学到了如何在安卓项目中使用Realm。可以看到创建一个Realm数据库、存储查询数据是多么的容易。要学习更多t Realm for Android的知识,你可以查阅它的 Java 文档。
- android Realm数据操作类详解
- Android Realm详解
- 【Android】Realm详解
- 使用Realm进行数据操作(一)
- 使用Realm进行数据操作(二)
- Realm-Android
- Realm-Android
- 【Android】Realm详解(Android 数据库Sqlite的完美替代者)
- Swift Realm-数据迁移
- realm数据库 For android
- Realm实战总结---Android
- Realm Android简单使用说明
- Realm for Android
- Realm Android简单使用说明
- Android数据库Realm实践
- Android数据库Realm实践
- Android Realm初试
- Android Realm数据库使用指南
- iOS推送:本地通知UILocalNotification
- HDU5645 DZY Loves Balls 数学
- 1.5根据位置返回字符(重点)
- unbuntu14.04密码正确登录不进去的解决
- 1.Python 图片转字符画
- android Realm数据操作类详解
- 在iOS8创建一个交互性强的本地通知
- el表达式在jsp显示时的一个异常
- matlab中nargin函数
- 网页添加滚动字幕
- 计时器与时钟的设计
- CSS3 Transition
- 快速掌握一门语言常用的50%
- 搬瓦工安装netspeeder