Realm Android简单使用说明
时间:2022-12-29 09:00:00
只是官方文件的搬运工。
Realm手机数据库可用于替代sqlite。 android对于本地数据存储有以下三种方式。
-sqlite数据库
-以文件的形式存储
-shareprefence
Shareprefence数据存储的本质是存储数据xml我们可以认为是Android一种基于文件存储的简单包装。
sp文件适用于缓存存储,如数据不需要条件查询和修改。如果只需要一些数据,则需要大量代码来实现此功能。数据库可以为我们实现这个功能。
Realm与其他例子不同greendao以及ormlite,这2种基于sqlite的orm实现。Realm可以说是和sqlite同级手机数据库。
废话很多,ok让我们看看Realm的使用吧。
首先Realm的文档:https://realm.io/docs/Java/latest/
目前Realm最新版本为0.88.3
这里需要特别说明。Realm在0.88.x之后的导入方法不同于以前的方法。让我们看看区别。
-android studio版本>=1.5.1
在这种情况下,我们需要项目build.gradle添加以下代码
注意工程build,不是具体app的。
buildscript { repositories { jcenter() } dependencies { classpath "io.realm:realm-gradle-plugin:0.88.3" } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
第二步我们在app的build.grade文件中
- 1
- 1
The Maven & Ant build systems are not supported. If you wish to see support for these build systems please express your interest in the below issues so we can gauge the interest.
maven和ant编译系统暂不支持,如果你希望支持他们请去他们的github留言。
(不发表任何评论,单纯翻译官方文档。)
- android studio版本<1.5.1
在这种情况下操作相对就简单多了
- 1
- 1
熟悉的代码熟悉的味道。
在这个版本的Realm支持了ec下的使用jar地址去官网下载吧。
一大段话终于把Realm给导入到项目里了。终于可以开始我们的第二步了。混淆。。。。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
第一步realm每个activity中使用都需要初始化。这里我们直接在application中初始化他吧。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
具体的activity中 Realm realm = Realm.getDefaultInstance();获得Realm的实例。
第一步创建我们具体要使用的对象。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
所有的对象都必须继承自RealmObject。
对象可以有以下几种类型
boolean, byte, short, ìnt, long, float, double, String, Date,byte[]. 以及RealmObject和RealmList
Realm中的注解:
-
@PrimaryKey
主键,不解释
-
@Required
必填项
-
@Ignore
忽视,数据库将不会存储该字段
- @Index
The annotation @Index will add a search index to the field. This will make inserts slower and the data file larger but queries will be faster. So it’s recommended to only add index when optimizing specific situations for read performance. We support indexing: String, byte, short, int, long, boolean and Date fields.
索引,添加索引后会导致增加变慢并且会导致数据库文件增大,但是查询的时候会快。(这个自行考虑了)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
我们就把一只叫叫旺财的狗存入了数据库
这里有个方法 realm.copyToRealmOrUpdate(obj);
如果存在这个数据就会更新如果不存在就会增加。
再也不需要select 一遍 在判断是增加或者修改了。
然后我们查询出了所有dog表中age=1的第一只,并将的age修改为2.
查询
- 1
- 1
查询出所有的狗。
删除
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
多表联查
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
这是最简单的多表联查的例子了。
- 1
- 2
- 3
- 1
- 2
- 3
查询出所有拥有1岁的狗的人。
下面是一些查询的方法
between, greaterThan(), lessThan(), greaterThanOrEqualTo() & lessThanOrEqualTo()
equalTo() & notEqualTo()
contains(), beginsWith() & endsWith()
分组
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 1
- 2
- 3
通过以上代码开启分组
排序
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
表达式
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
回调的使用
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14