Realm Java文档 技术文档,开卷有益
刚刚开始用Realm,肯定是要对比着SQLite来琢磨的,说几个个人认识:
一、SQLite中的数据库名对应Realm的啥
Realm可以简单直接使用,这个时候似乎是弱化了数据库名的存在,也就是这个时候的数据库文件是默认的default.realm。弱化不代表不用,在实现RealmConfiguration时,通过如下代码new RealmConfiguration.Builder(context).name("myrealm.realm")来控制和指定名字。
二、表名去了哪里?
这个开始也会有点纠结,就是转不过来这个思维。
继承RealmObject的类也可以理解为一张张表的类。这个应该是在实体类和数据库的表结构之间做了个平衡,一个很惊喜的平衡。虽然也带了一个问题:加到getter和setter的任何自定义逻辑实际上并不会被执行。
三、有没有再次封装的必要性?
这个不确定,应该有,但是像查询来说,realm的实现已经够简单了,封装感觉鸡肋点。
接下来开始使用了
1.在module的gradle中添加compile 'io.realm:realm-android:0.87.5';
2.随便搞个什么类,但是要继承RealmObject。
例如我声明个Book.class,包括name和author两条私有属性,原因如下:
3.然后再activity里面使用realm:
本来可以这样的
- realm = Realm.getInstance(this);
但是,为了后续学习也为了不装X,先配置个RealmConfiguration好了。
- <RealmConfiguration configuration = new RealmConfiguration.Builder(this)
- .name("test.realm")
- .encryptionKey(new byte[64])
- .schemaVersion(2)
-
-
-
- .build();
- realm = Realm.getInstance(configuration);
注意:不同的activity使用同一个.realm文件时配置必须相同;
所有操作都必须在事务内执行;
具体操纵:
①增
-
- private void realmInsert(Realm realm) {
- realm.beginTransaction();
- Book book = realm.createObject(Book.class);
- book.setAuthor("司马迁");
- book.setName("史记");
- realm.commitTransaction();
- book = realm.where(Book.class).findFirst();
- }
②查
-
- Book book = realm.where(Book.class)
- .equalTo("name","史记")
- .or()
- .equalTo("author","司马迁")
- .findFirst();
-
-
Realm的查询也是支持排序的,但是它的处理是在查询出结果后再进行排序。
- RealmResults<Book> result = realm.where(Book.class).findAll();
-
- Result.sort(“name”,Sort.DESCENDING);</span>
注意:目前并不是支持所有字符集
③改
修改之前要确定一件事,你的model中有@PrimaryKey约束的主键,
否则
- private void realmUpdate(Realm realm){
- realm.beginTransaction();
- Book b = new Book();
- b.setId(1);
- b.setAuthor("simaqian");
- b.setName("史记");
- realm.copyToRealmOrUpdate(b);
- realm.commitTransaction();
- }
修改还有一种方式,好像还是realm提倡和鼓励的方式,就是直接对查询到的结果修改,然后该修改就会反馈回数据库,例如:
- private void realmUpdate(Realm realm){
- realm.beginTransaction();
-
-
-
-
-
- realm.where(Book.class).findFirst().setAuthor("斯巴达");
- realm.commitTransaction();
- realmSelect(realm);
- }
感觉还是查询出来复制一份使用比较好。。。
④删
删除和修改一样,你的model中有@PrimaryKey约束的主键
- private void realmDelete(Realm realm){
- realm.beginTransaction();
- RealmResults results = realm.where(Book.class).findAll();
-
- results.remove(1);
-
-
-
-
-
-
-
-
-
-
-
-
- realm.commitTransaction();
- }
转载自:http://blog.csdn.net/shareye1992/article/details/50789216