在android中使用Realm数据库框架
来源:互联网 发布:python opencv3.0 svm 编辑:程序博客网 时间:2024/05/16 14:00
详细参考说明在https://realm.io/docs/java/latest/#getting-started
Github地址在https://github.com/realm/realm-java
具体要使用该框架需要参考文档Getting Started中配置
Realm使用C++编写,不同于android中的sqlite
Realm,RealmConfiguration,RealmObject,RealmList,RealmQuery,RealmResults这些概念想要了解可以去看文档。
其中byte, short, int, and long会自动映射成long
将数据保存到数据库
比如一对一:
下面的操作都要放到executeTransactionAsync中
1.增加记录,
Github地址在https://github.com/realm/realm-java
具体要使用该框架需要参考文档Getting Started中配置
Realm使用C++编写,不同于android中的sqlite
下面看一张结构图,
Realm,RealmConfiguration,RealmObject,RealmList,RealmQuery,RealmResults这些概念想要了解可以去看文档。
1.在application中初始化
<span style="font-size:14px;">public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build(); Realm.setDefaultConfiguration(realmConfiguration); }}</span>
2.在activity或者fragment中获取和关闭realm
<span style="font-size:14px;">public class MyActivity extends Activity { private Realm realm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); realm = Realm.getDefaultInstance(); } @Override protected void onDestroy() { super.onDestroy(); realm.close(); }}</span>
<span style="font-size:14px;">public class MyFragment extends Fragment { private Realm realm; @Override public void onStart() { super.onStart(); realm = Realm.getDefaultInstance(); } @Override public void onStop() { super.onStop(); realm.close(); }}</span>
3.使用realm来操作数据库,尽管这些操作很快,但是还是建议放在后台进行。可以在回调中更新ui
<span style="font-size:14px;">realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { User user = bgRealm.createObject(User.class); user.setName("John"); user.setEmail("john@corporation.com"); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { // Transaction was a success. } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { // Transaction failed and was automatically canceled. } });</span>
这里要注意,你监听了并且在回调的方法中执行了ui操作。可能你执行ui操作之前activity或者fragment已经关闭
,所以我们要及时关闭realm任务,避免程序crash<span style="font-size:14px;">@Overridepublic void onStop () { if (transaction != null && !transaction.isCancelled()) { transaction.cancel(); }}</span>
4.加密数据库
<span style="font-size:14px;">byte[] key = new byte[64]; new SecureRandom().nextBytes(key); RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this) .encryptionKey(key) .build(); // Start with a clean slate every time Realm.deleteRealm(realmConfiguration); // Open the Realm with encryption enabled realm = Realm.getInstance(realmConfiguration);</span>
5.一些基本的常用的realm数据库操作。
支持boolean, byte, short, ìnt, long, float, double, String, Date and byte[];其中byte, short, int, and long会自动映射成long
a,建立实体对象,继承RealmObject
RealmObject是自动更新的,比如你将一个数据读取出来后,又做了修改,修改会马上在数据中生效,不需要你再将数据保存到数据库
<span style="font-size:14px;">public class User extends RealmObject {//realm不支持final, transient and volatile 修饰符@PrimaryKey //定义主键private int id;@Required //表示realm会检查该字段不允许为空 private String name; private int age; @Ignore //表示realm会在操作数据库时忽略该字段,不会存放 private int sessionId; // Standard getters & setters generated by your IDE… public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSessionId() { return sessionId; } public void setSessionId(int sessionId) { this.sessionId = sessionId; }}</span>当然也支持绑定一个reamlobject,来建立数据库中一对一,一对多,多对多的关系
比如一对一:
<span style="font-size:14px;">public class Email extends RealmObject { private String address; private boolean active; // ... setters and getters left out}public class Contact extends RealmObject { private String name; private Email email; // ... setters and getters left out}</span>比如一对多,多对多,使用RealmList
<span style="font-size:14px;">public class Contact extends RealmObject { public String name; public RealmList<Email> emails;}public class Email extends RealmObject { public String address; public boolean active;}</span>
b.根据上面的介绍,建立好实体对象和完成reaml的初始化和获取后。就可以开始幸福的简单的数据库操作了
包含增删改查;下面的操作都要放到executeTransactionAsync中
1.增加记录,
<span style="font-size:14px;">User user = realm.createObject(User.class);user.setName("John");user.setEmail("john@corporation.com");</span>2.查询记录,
RealmResults<User> result2 = realm.where(User.class) //以where表示条件的开头中间表示条件 .equalTo("name", "John") .or() .equalTo("name", "Peter") .findAll(); //以findAll表示条件的结尾 可以不要条件,表示全部查找。也可以将多个连续查询合并,示例如下 RealmResults<User> r2 = realm.where(User.class) .equalTo("dogs.name", "Fluffy") .findAll() .where() .equalTo("dogs.color", "Brown") .findAll(); .where() .equalTo("dogs.color", "Yellow") .findAll();
一些常用的查找条件,between(), greaterThan(), lessThan(), greaterThanOrEqualTo() & lessThanOrEqualTo()equalTo() & notEqualTo()contains(), beginsWith() & endsWith()isNull() & isNotNull()isEmpty() & isNotEmpty()可以查完后排序RealmResults<User> result = realm.where(User.class).findAll();result = result.sort("age"); // Sort ascendingresult = result.sort("age", Sort.DESCENDING);可以查完后进行求和,求最大最小,求平均RealmResults<User> results = realm.where(User.class).findAll();long sum = results.sum("age").longValue();long min = results.min("age").longValue();long max = results.max("age").longValue();double average = results.average("age");long matches = results.size();3.删除记录,搜索出需要删除的记录后调用
final RealmResults<User> results = getUsers();results.deleteFromRealm(0); results.deleteFirstFromRealm(); results.deleteLastFromRealm(); results.deleteAllFromRealm();4.修改记录,直接查完后调用set方法就可以了。
0 0
- 在android中使用Realm数据库框架
- 如何在Android中使用Realm数据库
- Realm数据库框架使用
- Android Realm数据库使用
- Android框架之路——Realm数据库使用
- android realm数据库基本使用
- Android Realm数据库的使用
- Android-->Realm数据库使用注意事项
- android之Realm数据库使用
- Android realm数据库使用笔记
- 在android中使用OrmLite数据库框架
- Realm 在Android中应用
- 在 Android 中使用 Realm 作本地存储
- 在Android中使用Realm作本地存储
- 在Android中使用Realm作本地存储
- Android数据库框架GreenDao&Realm实战分析
- Android Realm数据库配合aop框架封装
- Realm数据库框架的使用例子
- 使用花生棒(内网版)远程控制电脑
- 用朴素贝叶斯进行文本分类(上)
- Centos7下RPM方式安装mysql-5.6.24
- struts2中constant参数设置
- Shiro Review——权限管理基础知识
- 在android中使用Realm数据库框架
- js 中object对象转json
- 【Swift】UISearchBar输入框的背景颜色
- LaunchImage和LaunchScreen.xib混用出现的坑
- 浅议 Dynamic_cast 和 RTTI
- Jedis对管道、事务以及Watch的操作详细解析
- opencv 学习笔记 (图像基础)
- c链表
- Kotlin