Reaml起始篇

原创 2016年06月01日 20:35:44
手机客户端开源数据库现在越来越多,但是从效率上讲,Realm数据库开源框架比起大家熟知的Ormlite和GreenDao而言有很大提升,使用方便集成快,而且支持异步数据查询操作和数据更新操作,首先说下集成环境搭配:
第一是将配制项目的gradle,工作空间的gradle配置如下:
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath "io.realm:realm-gradle-plugin:1.0.0"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
Module的gradle配置如下:
apply plugin: 'com.android.application'
apply plugin: 'realm-android'
可能会build时候可能会出现gradle—wrapper版本问题:
说什么版本请更新到2.10的gradle,这里有解决方案:http://www.ithao123.cn/content-10783272.html
这样就搭建好的Realm开发环境:
 数据库首先需要一个bean对象,我们创建了一个User对象继承了RealmObject
public class User extends RealmObject {
    private  String name;

    private  int age;

    @Ignore
    private int sex;

    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 getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}
记住@Ignore会忽视对象作用于sex,当我们更新数据想修改sex时候会无法成功,并且创建的时候去改变这个值也是无法修改的,只会是默认值0;之后我们会测试下:
好了创建了一个对象表,那么自然而然想往表里面添加一些数据,但是我们首先要获取一个realm对象,然后执行插入数据操作:
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(MainActivity.this).build();
Realm.setDefaultConfiguration(realmConfiguration); 
Realm realm = Realm.getDefaultInstance();
上面代码会获取一个默认的realm对象,如果不使用默认的realm对象可以这样创建:
Realm myOtherRealm =
        Realm.getInstance(
                new RealmConfiguration.Builder(context)
                        .name("myOtherRealm.realm")
                        .build()
);
创建完了这个对象就可以执行相应数据操作:
realm.beginTransaction();
User user = realm.createObject(User.class);
user.setAge(12);
user.setName("JACK");
User user2 = realm.createObject(User.class);
user2.setAge(14);
user2.setName("JACK2");
realm.commitTransaction();
如上插入两个对象,记住这样的写法会需要手动开启事务和关闭事务,或许感觉会有点麻烦。
我们可以这样:
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm bgrealm) {
        User user = bgrealm.createObject(User.class);
        user.setAge(12);
        user.setName("JACK");
        user.setSex(1);
        User user2 = bgrealm.createObject(User.class);
        user2.setAge(14);
        user2.setName("JACK2");
        user2.setSex(1);
    }
});
执行一个事务,并且使用的是bgrealm,这样就可以实现类似于异步操作数据库了。
当然realm提供异步操作数据库的方法:
realm.executeTransactionAsync(new Realm.Transaction() {
    @Override
    public void execute(Realm bgrealm) {
        User user = bgrealm.createObject(User.class);
        user.setAge(12);
        user.setName("JACK");
        user.setSex(1);
        User user2 = bgrealm.createObject(User.class);
        user2.setAge(14);
        user2.setName("JACK2");
        user2.setSex(1);
    }
});
就是真正上的异步操作数据库。
说道查询可能是大家都觉得一定很难吧,其实Realm已经将查询工作做到很简单了,如下最基本的查询:
RealmResults<User> findallrealmResults = realm.where(User.class).findAll();
这样就查询了User表中所有数据。
条件查询也很简单:
RealmResults<User> realmResults = realm.where(User.class).equalTo("name", "JACK").equalTo("age", 12).findAll();
reaml支持lessThan,equalTo,lessThanOrEqualTo,greaterThan等等方法;有多少个条件就在后面一个个加上去就行了。
除了查询之外我们还可以监听我们之前查询的数据量变化,当添加了数据之后我们是不是需要执行一个新的查询??Realm早就帮我们想好了,它提供了如下方法:
findallrealmResults.addChangeListener(new RealmChangeListener<RealmResults<User>>() {
    @Override
    public void onChange(RealmResults<User> element) {
        Log.i(TAG, "onChange: " + element.size());
    }
});
当执行数据插入时候会监听捕捉到数据变化,于是我们就不需要在执行一次数据查询。
数据更新操作起始也很简单,只需要执行一个异步的方法realm.executeTransactionAsync,在这个方法里面先查询需要更改的数据,然后在执行new Realm.Transaction.OnSuccess()方法就可以了,如下:
realm.executeTransactionAsync(new Realm.Transaction() {
    @Override
    public void execute(Realm bgRealm) {
        RealmResults<User> findresults = bgRealm.where(User.class).equalTo("age", 13).findAll();
        for (User u : findresults
                ) {
            u.setAge(13);
            u.setSex(1);//此处不生效,因为sex属性是Ingroce
        }
    }
}, new Realm.Transaction.OnSuccess() {
    @Override
    public void onSuccess() {
        for (User u : findallrealmResults
                ) {
            Log.i(TAG, "user:" + u.toString());
        }
    }
}, new Realm.Transaction.OnError() {
    @Override
    public void onError(Throwable error) {

    }
});
最后还有一个删除操作也很简单,还是先查询然后在执行删除操作,如下:
btnDelete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm bgrealm) {
                RealmResults<User> results = realm.where(User.class).findAll();
                User user=results.get(2);
                user.deleteFromRealm();//删除指定位置的查询结果

                results.deleteLastFromRealm();//删除最后一个查询结果
                results.deleteAllFromRealm();//删除所有的查询到的结果
                results.deleteFirstFromRealm();//删除第一个查询结果
            }
        });
    }
});
Demo下载地址:https://github.com/1036711153/RealmDemo

Realm更新字段

Realm更新字段
  • wellchang
  • wellchang
  • 2017年04月12日 10:05
  • 819

Realm数据库字段更新

/** * 通过反射改变更新状态 * @param obj * @param filedName * @return */ public RealmObj...
  • xiaolong520gy
  • xiaolong520gy
  • 2017年03月15日 16:06
  • 873

Realm 数据库的简单使用

Realm 出来这么久了,一直没时间巩固,今天就花点时间巩固下吧。 在没接触Realm之前,基本都是用Sqlite,现在都抛弃Sqlite了,相对于Sqlite来说,Realm更快并且具有很多现代数据...
  • hedong_77
  • hedong_77
  • 2016年11月15日 08:58
  • 3075

Reaml 数据库版本升级

import io.realm.DynamicRealm; import io.realm.RealmMigration; import io.realm.RealmObjectSchema; imp...
  • u011057161
  • u011057161
  • 2017年02月14日 12:37
  • 136

Android数据库框架GreenDao&Realm实战分析

Android开发的童鞋应该都知道,使用官方的SQLite数据库,可以满足我们大部分增删改查的需求,然而随着Android技术的逐步成长,你会慢慢发现SQLite越来越不能满足我们的需求。总结为以下主...
  • zhanggang740
  • zhanggang740
  • 2016年08月09日 17:35
  • 7766

C# III: 数据库基本操作

用C#操作数据库——数据库使用SQL Server为例,对应的namespace是System.Data.SqlClient. 读取数据 从数据库中读取数据是最基本的操作了。 示例代码如下: S...
  • alvachien
  • alvachien
  • 2016年06月29日 22:51
  • 367

使用shiro进行登录校验;自定义realm的实现

在web中, 用户输入用户名密码登录,我们需要用这些信息和已经注册存在在数据库中的账户信息进行对比,判断用户名和密码是否正确。 shiro提供了自定义realm的实现来进行处理对不同数据源的校验: r...
  • mggwct
  • mggwct
  • 2016年06月05日 15:49
  • 8672

Spring项目集成ShiroFilter简单实现权限管理

微信测试
  • u013132051
  • u013132051
  • 2017年02月13日 20:00
  • 6993

起始篇

开始记录工作、学习中的点点滴滴。不为别的,只为留下点成长的足迹。
  • liujinke
  • liujinke
  • 2011年03月17日 13:53
  • 61

Shiro第三篇【授权、自定义reaml授权】

Shiro授权上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro的授权Shiro授权的流程和认证的流程其实是差不多的:Shiro支持的授权方式Shiro支持的授权方式有三种: S...
  • hon_3y
  • hon_3y
  • 2017年08月17日 21:04
  • 215
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Reaml起始篇
举报原因:
原因补充:

(最多只允许输入30个字)