第三方数据库 - Realm数据库

1. 简介


Realm是一个 MVCC(多版本并发控制)数据库,本质是嵌入式数据库,不是基于SQLite所构建,它有自己的数据库存储引擎,可以高效并且快速完成数据库构建,速度比SQLite快,目的是取代SQLite。

2. 优势


1>:它不是在SQLite基础上的ORM(对象关系模型),它有自己数据库查询引擎,容易使用;
2>:比任何ORM速度都快,比SQLite速度也快;
3>:跨平台,支持IOS、Swift、Android,可以在这些平台上边共享Realm数据库文件;
4>:支持加密、格式化查询、容易移植、支持Json、流式api、数据变更通知;
5>:提供数据库查看工具;

3. 使用


1>:在项目的build.gradle中配置:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath "io.realm:realm-gradle-plugin:2.2.1"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2>:在app下边的build.gradle中配置:

apply plugin: 'com.android.application'
apply plugin: 'realm-android'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "cn.novate.realmdemo"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

3>:定义对象User如下:

/**
 * Email: 2185134304@qq.com
 * Created by JackChen 2018/4/20 17:39
 * Version 1.0
 * Params:
 * Description:
*/
public class User extends RealmObject {

    @Required
    private String id ;
    private String name ;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4>:增删改查如下:

/**
 * Email: 2185134304@qq.com
 * Created by JackChen 2018/4/23 9:05
 * Version 1.0
 * Params:
 * Description:    增删改查如下
*/

public class MainActivity extends AppCompatActivity {

    private Realm mRealm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        initRealm() ;

    }


    /**
     * 初始化数据库
     */
    private void initRealm() {
        Realm.init(this);
        //mRealm = Realm.getDefaultInstance();
        RealmConfiguration configuration = new RealmConfiguration.Builder()
                .name("test.realm")  // 数据库名
                .schemaVersion(2)  // 版本号
//                .migration(new CustomMigration())//升级数据库
                //.deleteRealmIfMigrationNeeded()
                .build();

        mRealm = Realm.getInstance(configuration);
        String str = mRealm.getPath();
        Log.e("TAG", str);
    }


    /**
     * 添加
     */
    public void add(View view){
        // 插入一条数据
        final User user = new User() ;
        user.setId("1");
        user.setName("Novate");
        mRealm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                realm.copyToRealm(user) ;
            }
        });
    }
    /**
     * 删除
     */
    public void delete(View view){

    }
    /**
     * 修改
     */
    public void update(View view){
        mRealm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                // 先查找得到User对象
                User user = mRealm.where(User.class).findFirst() ;
                user.setName("北京-Novate");
            }
        });
    }
    /**
     * 查询
     */
    public void query(View view){
        // RealmResults -> 基类是List集合
        RealmResults<User> userList = mRealm.where(User.class).findAll() ;
        for (User user : userList) {
            Toast.makeText(MainActivity.this , "size ->" + userList.size() + "id ->"+ user.getId() +"name ->"+user.getName() , Toast.LENGTH_SHORT).show(); ;
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Close the Realm instance.
        mRealm.close();
    }
}

以上就是Realm进行增删改查的具体实现,自己只是简单的实现这几个比较常用的,如果需要数据库加密、升级数据库、或其他操作,可以参考这篇文章:

Realm具体使用
AndroidRealm详解

代码已上传至github:
https://github.com/shuai999/RealmDemo

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容