Android数据库Realm学习(一)基本使用
2016-03-03 16:18
549 查看
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:
本来可以这样的
但是,为了后续学习也为了不装X,先配置个RealmConfiguration好了。
注意:不同的activity使用同一个.realm文件时配置必须相同;
所有操作都必须在事务内执行;
具体操纵:
①增
②查
Realm的查询也是支持排序的,但是它的处理是在查询出结果后再进行排序。
注意:目前并不是支持所有字符集
③改
修改之前要确定一件事,你的model中有@PrimaryKey约束的主键,
否则
修改还有一种方式,好像还是realm提倡和鼓励的方式,就是直接对查询到的结果修改,然后该修改就会反馈回数据库,例如:
感觉还是查询出来复制一份使用比较好。。。
④删
删除和修改一样,你的model中有@PrimaryKey约束的主键
好了,目前简单使用就到此为止,虽然标题用了(一),但是会不会有(二)我也说不准......
谢谢!
刚刚开始用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])//加密用字段,不是64位会报错 .schemaVersion(2)//版本号 // .setModules(xxxx)//不懂 // .migration(xxxx)//不懂 // .inMemory()//设置后会放在缓存中 .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 book = realm.where(Book.class) .equalTo("name","史记")//相当于where name='史记' .or()//或,连接查询条件;没有这个方法时,默认是隐式地被逻辑和(&)组合 .equalTo("author","司马迁")//相当于 author='司马迁' .findFirst(); //整体相当于select * from (test.realm) where name='史记' or author='司马迁' limit 1; //Book book = realm.where(Book.class).findFirst();
Realm的查询也是支持排序的,但是它的处理是在查询出结果后再进行排序。
RealmResults<Book> result = realm.where(Book.class).findAll(); //Result.sort(“name”); Result.sort(“name”,Sort.DESCENDING);</span>
注意:目前并不是支持所有字符集
③改
修改之前要确定一件事,你的model中有@PrimaryKey约束的主键,
否则
private void realmUpdate(Realm realm){ realm.beginTransaction();//开启事务 Book b = new Book();//新建实例 b.setId(1);//book类新加的int属性,用@PrimaryKey注解作为主键 b.setAuthor("simaqian"); b.setName("史记"); realm.copyToRealmOrUpdate(b);//修改操作 realm.commitTransaction();//提交事务 }
修改还有一种方式,好像还是realm提倡和鼓励的方式,就是直接对查询到的结果修改,然后该修改就会反馈回数据库,例如:
private void realmUpdate(Realm realm){ realm.beginTransaction(); // Book b = new Book(); // b.setId(1); // b.setAuthor("simaqian"); // b.setName("史记"); // realm.copyToRealmOrUpdate(b); 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); ////方式二:删除指定model第一种 //Book book = new Book(); //book.setId(2); //book.setName("史记"); //book.setAuthor("司牛迁"); //results.remove(book); //方式三:删除指定model第一种 //book.removeFromRealm(); ////方式四:删除末尾一个 //results.removeLast(); ////方式wu:清除全部 //results.clear(); realm.commitTransaction(); }
好了,目前简单使用就到此为止,虽然标题用了(一),但是会不会有(二)我也说不准......
谢谢!
相关文章推荐
- android性能优化
- android中下载加速
- Android 触摸及手势操作GestureDetector
- NavigationDrawer和NavigationView-Android M新控件
- Android Studio1.5中NDK开发
- android中shape的属性
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- andrAndroid 权限
- Android Studio系列教程六--导入jar包
- Android中使用Handler造成内存泄露的分析和解决
- Android的Native方式广播intent
- Android Design TextinputLayout
- Yalantis 那些动画效果很炫的 Android 及 iOS 开源项目
- Android数据存储之SharedPreferences 共享首选项/偏好设置
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
- Android Studio在项目中添加assets资源目录
- Android-Universal-Image-Loader 属性设置
- Android 开发测试环境切换工具
- Android 自定义View可拖动移动位置及边缘拉伸放大缩小
- 移动开发:Android Ant一键自动打多渠道包(xmltask)