详细参考说明在https://realm.io/docs/java/latest/#getting-started
Github地址在https://github.com/realm/realm-java
具体要使用该框架需要参考文档Getting Started中配置
Realm使用C++编写,不同于android中的sqlite

下面看一张结构图,


realm重要的对象,
Realm,RealmConfiguration,RealmObject,RealmList,RealmQuery,RealmResults这些概念想要了解可以去看文档。

1.在application中初始化

public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();        Realm.setDefaultConfiguration(realmConfiguration);    }}

2.在activity或者fragment中获取和关闭realm

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();    }}

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();    }}

3.使用realm来操作数据库,尽管这些操作很快,但是还是建议放在后台进行。可以在回调中更新ui

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.            }        });

这里要注意,你监听了并且在回调的方法中执行了ui操作。可能你执行ui操作之前activity或者fragment已经关闭

,所以我们要及时关闭realm任务,避免程序crash
@Overridepublic void onStop () {    if (transaction != null && !transaction.isCancelled()) {        transaction.cancel();    }}

4.加密数据库

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);

5.一些基本的常用的realm数据库操作。

支持boolean, byte, short, ìnt, long, float, double, String, Date and byte[];
其中byte, short, int, and long会自动映射成long

a,建立实体对象,继承RealmObject

RealmObject是自动更新的,比如你将一个数据读取出来后,又做了修改,修改会马上在数据中生效,不需要你再
将数据保存到数据库
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; }}
当然也支持绑定一个reamlobject,来建立数据库中一对一,一对多,多对多的关系
比如一对一:
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}
比如一对多,多对多,使用RealmList
public class Contact extends RealmObject {    public String name;    public RealmList emails;}public class Email extends RealmObject {    public String address;    public boolean active;}

b.根据上面的介绍,建立好实体对象和完成reaml的初始化和获取后。就可以开始幸福的简单的数据库操作了

包含增删改查;
下面的操作都要放到executeTransactionAsync中
1.增加记录,
User user = realm.createObject(User.class);user.setName("John");user.setEmail("john@corporation.com");
2.查询记录,
RealmResults result2 = realm.where(User.class)  //以where表示条件的开头中间表示条件                                  .equalTo("name", "John")                                  .or()                                  .equalTo("name", "Peter")                                                                    .findAll();   //以findAll表示条件的结尾    可以不要条件,表示全部查找。也可以将多个连续查询合并,示例如下    RealmResults 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 result = realm.where(User.class).findAll();result = result.sort("age"); // Sort ascendingresult = result.sort("age", Sort.DESCENDING);可以查完后进行求和,求最大最小,求平均RealmResults 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 results = getUsers();results.deleteFromRealm(0);     results.deleteFirstFromRealm();    results.deleteLastFromRealm();        results.deleteAllFromRealm();
 4.修改记录,直接查完后调用set方法就可以了。

更多相关文章

  1. Android的5中数据存储方式
  2. android sqlite数据库时间 日期 double等数据类型
  3. Android项目开发技术总结 by wellsoho
  4. Android--SQLite数据库应用技巧分享
  5. Android中对文件保存、读取和删除操作的实现
  6. Android(安卓)Sqlite synchronous设置
  7. 安卓开发:学生信息管理小程序
  8. Android(安卓)短信模块分析(八) MMS数据库表关系
  9. Android中对SQLite的操作

随机推荐

  1. android的文件操作。(未整理完成)
  2. Android(安卓)商显会议平板聚光灯效果实
  3. Android(安卓)sub project list
  4. Android中Activity之间访问互传参数
  5. Android:getWritableDatabase/getReadabl
  6. Android(安卓)分组列表适配器 MyExpandab
  7. Android(安卓)系统广播Action一览验证
  8. Android(安卓)DEV : Andriod Studio Show
  9. Android之再谈文件操作和SDcard读写
  10. Android(安卓)ViewHolder