写在前面:我们再做一个三端的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 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 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. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  4. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  5. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  6. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  7. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  8. 四、Android.mk之编译生成可执行文件
  9. android AVD 启动时报错(emulator: erroremulator:ERROR:This AVD'

随机推荐

  1. Android(安卓)Studio更改SDK或者JDK路径
  2. How to set Android(安卓)camera orienta
  3. Android(安卓)图片缩放,手势,事件
  4. Android中xml生成
  5. Android:Google Play services and OAuth
  6. android samsung note3  device not fou
  7. Android评论留言页面
  8. Android中下拉列表框操作
  9. android 脸部抠图
  10. Android(安卓)项目混编flutter报错