android 使用Realm数据库

写在前面:我们再做一个三端的UI以及api的框架,其中数据库部分想采用realm,但前期参考不够全面,暂时得知的realm知识点不足以把这个框架进行下去,导致没有结合于react-native。总结为没有找到realm执行sql语句很好的方式。或者说realm不支持执行sql?

正题

官方网站
realm不支持android之外的java,切不支持eclipse,要使用as。

安装

1.在项目级build.gradle文件中的dependencies 模块添加

 classpath "io.realm:realm-gradle-plugin:5.8.0"

这里
2.在应用级build.gradle文件中添加

apply plugin: 'realm-android'

在这里插入图片描述

代码

在Application的onCreate中初始化
初始化有两种方式:
1.默认方式

Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder().build();
Realm.setDefaultConfiguration(config);

这种方式会默认生成一个default.realm的文件。

2.定义数据库名字、版本等等

Realm.init(this);
RealmConfiguration bksx_xx_db = new RealmConfiguration.Builder().name("bksx_xx_db.realm").build();
Realm.setDefaultConfiguration(bksx_xx_db);

库
如果用模拟器可以在as的菜单中点击VIew > Tool Windows > Device File Explorer 可以找模拟器的文件储存位置,这个文件在data/data/包名下找到。
其中这个RealmConfiguration还有一些其他属性可供使用

Builder.name : 指定数据库的名称。如不指定默认名为default。
Builder.schemaVersion : 指定数据库的版本号。
Builder.encryptionKey : 指定数据库的密钥。
Builder.migration : 指定迁移操作的迁移类。
Builder.deleteRealmIfMigrationNeeded : 声明版本冲突时自动删除原数据库。
Builder.inMemory : 声明数据库只在内存中持久化。
build : 完成配置构建。

在我的测试中当完成本步骤时,数据库文件并没有产生(也可能是ddms迟钝的原因),当我添加数据后才看到文件

创建实体类

这个实体类应和和数据格式一一对应,而在realm中是根据这个实体类创建的表结构key。
这个实体类要继承RealmObject,事实上在增删改查的操作中也是使用这个类中的方法来操作的。

public class Dog extends RealmObject {

    private String name;
    private int age;
    private String id;

    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 String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}
增加数据
Realm realm = Realm.getDefaultInstance();
                realm.beginTransaction();
                Dog dog = realm.createObject(Dog.class);
                dog.setAge(7);
                dog.setId("777");
                dog.setName("YOU WILL.");
                realm.commitTransaction();
删除数据
Realm realm = Realm.getDefaultInstance();
                RealmResults<Dog> dogs = realm.where(Dog.class).findAll();
                realm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
//                        dogs.deleteFromRealm(0);
//                        dogs.deleteLastFromRealm();    //删除最后一条
//                        dogs.deleteFirstFromRealm();     //删除第一条
                        dogs.deleteAllFromRealm();
                    }
                });

其中的delete…Realm()等方法就是我们实体类所继承的父类中的方法了。

更改数据
Realm realm = Realm.getDefaultInstance();
//                Dog id = realm.where(Dog.class).equalTo("id", "777").findFirst(); //只查一个
                RealmResults<Dog> all = realm.where(Dog.class).equalTo("id", "777").findAll();
                realm.beginTransaction();
                for (int i = 0; i < all.size(); i++) {
                    all.get(i).setAge(99);
                }
                realm.commitTransaction();

更改数据我用了条件更改 .equalTo(“id”,“777”).findFirst(); 更改id为“777”的一条数据,如果用.findAll();是更改所有满足条件的数据。这里的for循环应该可以改成更好的方式替换数据。

查询数据

其实上边已经体现出来了

Dog id = realm.where(Dog.class).equalTo("id", "777").findAll();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值