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进行增删改查的具体实现,自己只是简单的实现这几个比较常用的,如果需要数据库加密、升级数据库、或其他操作,可以参考这篇文章:
代码已上传至github:
https://github.com/shuai999/RealmDemo