Android之数据库Realm使用说明

Github官网(Java版):https://github.com/realm/realm-java

现在Realm的最新版是5.11.0

 

Realm的特点:

  • 手机数据库:Realm是第一个手机数据库,数据库从基础搭建到运行都是在手机/平板/智能佩戴设备上。
  • 使用简单:数据可以直接通过代码查询到,消除了对象关系映射ORM的性能和维护问题。使用直观方便,几分钟便可运行起来。
  • 现代化:支持简单的线程安全、关系和加密。
  • 快捷:realm维护一个非常丰富的特性集的时候都比任何原生SQLite的普通操作要快。

 

Realm 的配置:

https://blog.youkuaiyun.com/amberoot/article/details/90021774

 

Realm的简单使用:

一、配置MyApplication 

1)创建MyApplication类并初始化Realm

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //初始化realm
        Realm.init(this);
    }
}

2)在 AndroidManifest.xml 文件中配置MyApplication

<application
    android:name=".MyApplication"
    ...
    ...

二、具体使用 

  • 先创建Model类(下图栗子是类User),每个类代表着一个表格,类中的每个变量代表表格中的列,所以下面表格User中有Id\Name\Age\Career四列。Model类必须继承RealmObject才能使用realm。标有@PrimaryKey的变量是这个表格的主键,主键是唯一的,而且主键类型必须是字符串或整型(int\byte\short\long)以及其包装类型(Int\Byte\Short\Long)
User
IdNameAgeCareer
    
public class User extends RealmObject{

    @PrimaryKey
    private int Id;
    private String Name;
    private String Age;
    private String Career;

    public int getId() {
        return Name;
    }

    public void setId(int id) {
        Id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getage() {
        return Age;
    }

    public void setAge(String age) {
        Age = age;
    }

    public String getCareer() {
        return Career;
    }

    public void setCareer(String career) {
        Career = career;
    }

    
}

 

  •  在操作数据库前要先创建实例Realm
​​​​​​​private Realm realm;
// 如果之前有实例运行,清Realm
//Realm.deleteRealm(Realm.getDefaultConfiguration());
// 创建一个空的实例Realm
realm = Realm.getDefaultInstance();

 

  •  Realm操作完成后要关掉哦(通常在onDesdroy操作)
@Override
protected void onDestroy() {
    super.onDestroy();

    realm.close(); 
}

 

  • 在realm中利用Model类User创建一个不带主键的表格(realm所有写的操作必须在transaction包中,才能保证多线程安全)
//常用表达式
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
       realm.createObject(User.class);

    }
});

//lambda表达式,更简洁
realm.executeTransaction(r -> r.createObject(User.class));

// RealmObjects with primary keys created with `createObject()` must specify the primary key value as an argument.
Command command = r.createObject(User.class, 0);
  • 在realm中利用Model类User创建一个带主键的表格(主键是ID)
// RealmObjects with primary keys created with `createObject()` must specify the primary key value as an argument.
Command command = r.createObject(User.class, 0);

 

  • Create(realm所有写的操作必须在transaction包中,才能保证多线程安全)
// realm所有写的操作必须在transaction包中,才能保证多线程安全
realm.executeTransaction(r -> {
    // 创建表格并给主键赋予值,主键的值一旦被赋值就不能更改了
    User user = r.createObject(User.class, 1);
    //写
    user.setName("Amberoot");
    user.setAge("8");
    user.setCareer("Engineer");

});

 

  • Read (字符串区分大小写)
//查询指定表格所有列
RealmResults<User> users = realm.where(User.class).findAll();
//异步查询,即在后台线程进行查询操作
users = realm.where(User.class).findAllAsync();
//查询表格中有指定参数的数据--区分大小写
users = realm.where(User.class).equalTo("Name", "Amberoot").findAll();
//查询表格中的第一行
User user = realm.where(User.class).findFirst();

 

  • 更新Update(可以在transaction包中操作)
User user = realm.where(User.class).findFirst();
realm.executeTransaction(r -> {
     user.setName("Senior");
     user.setAge(99);
     user.setCareer("haha")
});

 

  • 删除Delete
//删除表格中所有数据
realm.executeTransaction(r -> r.delete(User.class));
//删除表格中第一行数据
realm.executeTransaction(r -> users.deleteFirstFromRealm());
//删除表格中最后一行数据
realm.executeTransaction(r -> users.deleteLastFromRealm());

 

  • OrderedRealmCollectionChangeListener(可以监听realm数据变化)

1)创建realmChangeListener 

private final OrderedRealmCollectionChangeListener<RealmResults<User>> realmChangeListener = (user, changeSet) -> {
    //监听数据插入
    String insertions = changeSet.getInsertions().length == 0 ? "" : "\n - Insertions: " + Arrays.toString(changeSet.getInsertions());
    //监听数据删除
    String deletions = changeSet.getDeletions().length == 0 ? "" : "\n - Deletions: " + Arrays.toString(changeSet.getDeletions());
    //监听数据变化
    String changes = changeSet.getChanges().length == 0 ? "" : "\n - Changes: " + Arrays.toString(changeSet.getChanges());
    
};

2)添加realmChangeListener (通常在onCreate操作)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Realm.deleteRealm(Realm.getDefaultConfiguration());
    realm = Realm.getDefaultInstance();
    users = realm.where(User.class).findAllAsync();

    //添加realmChangeListener
    users.addChangeListener(realmChangeListener);
}

3) 完成后清除realmChangeListener(通常在onDesdroy操作)

@Override
protected void onDestroy() {
    super.onDestroy();

    //清除realmChangeListeners
    users.removeAllChangeListeners(); 

    realm.close(); 
}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值