- 안드로이드 표준 라이브러리에서 제공하는 SQLite 이외에 사용해 볼 만한 데이터베이스

- 로컬 데이터베이스

- 속도 면에서 SQLite보다 훨씬 더 빠름

 

 

 

 

 

-사용법-

1. 프로젝트 수준 그레이들 파일

dependencies{
 classpath 'com.android.tools.build:gradle:3.2.1'
 classpath "io.realm:realm-gradle-plugin:3.5.0"
}

dependencies{ 
classpath 'com.android.tools.build:gradle:3.2.1' 
classpath "io.realm:realm-gradle-plugin:3.5.0"
}

적으면 realm 플러그인 설치됨

 

 

 

 

2. 모듈의 gradle 파일

apply plugin: 'realm-android'

apply plugin: 'realm-android'

 

 

 

 

3.

Realm이 기본 ORM을 목적으로 하므로 Realm이 관리할 VO(Value-Object) 클래스를 하나 만들어 준다.
*VO(Value-Object) = 데이터만을 표현하기 위한 클래스 (get,set 만 있는거)

public class MemoVO extends RealmObject{    
public String title;    
public String content;
}

RealmObject를 상속 받은 VO 객체의 변수 데이터를 Realm이 자동 해석해 데이터를 저장하거나 저장된 데이터로 객체를 만들어 준다.

 

 

 

 

4. 이제 Realm을 이용해야 하는데 데이터 저장, 획득을 위한 Realm 객체를 획득

Realm.init(this);
Realm mRealm = Realm.getDefaultInstance();

 

 

 

 

5. 이렇게 획득한 Realm객체를 VO객체의 데이터를 저장하는 방법

mRealm.executeTransaction(new Realm.Transaction(){
	@Override
    public void execute(Realm realm){
    	MemoVO vo = realm.createObject(MemoVO,class);
        vo.title = title;
        vo.content = content;
        }
});

execute() 함수 내부에서 데이터 저장을 위해 Realm과 연결된 VO 객체를 createObject(MemoVO.class); 코드로 하나 생성해 주고 이렇게 생성된 VO 객체의 변수에 데이터만 주면 자동으로 저장되는 구조이다.

 

 

 

6. 데이터를 획득하는 방법

MemoVO vo = mRealm.where(MemoVO.class).equalTo("title","hello").findFirst();

코드 한줄 데이터를 읽어옴.

설명 - > MemoVO.class 타입이면서 title 값이 hello인 데이터 중 첫번째 데이터를 가져오는 코드

 

 

 

 

 

7. title 역순으로 정렬하여 모든 데이터를 획득하는 코드, 만약 데이터 획득 시 조건을 명시하려면 equalTo()함수 이용해라

mRealm.where(MemoVO.class).findAllSorted("title",Sort.DESCENDING);

 

 

 

 

8. 조건 명시

equalTo() between() beginsWith() endsWith() isNotNull() in() isNull()

lessThan()

lessThanOrEqualTo() contains() like()    

 

 

 

 

9. 데이터 여러 건이면 RealmResults 타입으로 획득 한다

RealmResults<MemoVO> results = mRealm.where(MemoVO.class).equalTo("title","Tiger").findAll();

 

 

 

 

 

10. 획득한 VO 객체의 데이터를 삭제하려면 deleteFromRealm() 함수 사용

MemoVO vo = mRealm.where(MemoVO.class).equalTo("title","hello").findFirst();
vo.deleteFromRealm();

 

 

 

 

11. 특정 타입(MemoVO)의 모든 데이터를 삭제하려면 delete() 함수를 이용해라

mRealm.delete(MemoVO.class);