Realm 이동 경량급 데이터베이스 프레임 워 크
SQLiteOpenHelper 는 생 성 표 데이터베이스 업그레이드, 데이터베이스 암호 화, 데이터 의 첨삭 검사 등 과 관련된다.sqllite 의 다 중 표 연결 왼쪽 링크 등등
데이터베이스 Realm, sqlite 를 대체 하 는 솔 루 션 입 니 다!
이것 은 자신의 데이터베이스 저장 엔진 을 가지 고 sqlite 보다 경량급 이 며 빠 른 속 도 를 가 집 니 다. 또한 JSON, 스 트림 api, 데이터 변경 알림, 자동 데이터 동기 화, 간단 한 인증, 방문 제어, 사건 처 리 를 지원 합 니 다. 가장 중요 한 것 은 크로스 플랫폼 입 니 다. 현재 자바, Objective C, Swift, React - Native 가 있 습 니 다.Xamarin 이라는 다섯 가지 실현 은 있 지만 그 도 자신의 단점 이 있다. 예 를 들 어 더 이상 조사 할 수 없다 는 것 이다.
하지만 우 리 는 주로 유행 하 는 Realm 프레임 워 크 를 어떻게 사용 하 는 지 이야기 합 니 다!
환경 설정
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:2.0.2"
}
}
apply plugin: 'realm-android'
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder()
.name("myRealm.realm")
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(config);
}
}
public class Dog extends RealmObject {
private String name;
private int age;
@PrimaryKey
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;
}
}
더 내 려 가면 저희 가 첨삭 하고 고 치 는 용법 을 말씀 드 리 겠 습 니 다.
형식 1: 대상 을 새로 만 들 고 저장 합 니 다.
Realm realm=Realm.getDefaultInstance();
realm.beginTransaction();
User user = realm.createObject(User.class); // Create a new object
user.setName("John");
user.setEmail("[email protected]");
realm.commitTransaction();
형식 2: Realm 데이터베이스 에 대상 복사
Realm realm=Realm.getDefaultInstance();
User user = new User("John");
user.setEmail("[email protected]");
// Copy the object to Realm. Any further changes must happen on realmUser
realm.beginTransaction();
realm.copyToRealm(user);
realm.commitTransaction();
(2) 실현 방법 2: 트 랜 잭 션 블록 사용
Realm mRealm=Realm.getDefaultInstance();
final User user = new User("John");
user.setEmail("[email protected]");
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealm(user);
}
});
Realm mRealm=Realm.getDefaultInstance();
final RealmResults dogs= mRealm.where(Dog.class).findAll();
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Dog dog=dogs.get(5);
dog.deleteFromRealm();
//
dogs.deleteFirstFromRealm();
//
dogs.deleteLastFromRealm();
// 1
dogs.deleteFromRealm(1);
//
dogs.deleteAllFromRealm();
}
});
Realm mRealm=Realm.getDefaultInstance();
Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst();
mRealm.beginTransaction();
dog.setName(newName);
mRealm.commitTransaction();
public List queryAllDog() {
Realm mRealm=Realm.getDefaultInstance();
RealmResults dogs = mRealm.where(Dog.class).findAll();
return mRealm.copyFromRealm(dogs);
}
(2) 조건 조회
public Dog queryDogById(String id) {
Realm mRealm=Realm.getDefaultInstance();
Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst();
return dog;
}
(3) 검색 결과 정렬
/**
* query ( )
*/
public List queryAllDog() {
RealmResults dogs = mRealm.where(Dog.class).findAll();
/**
* , Id ,
*/
//
dogs=dogs.sort("id");
//
dogs=dogs.sort("id", Sort.DESCENDING);
return mRealm.copyFromRealm(dogs);
}
(4) 기타 조회 sum, min, max, average 는 전체 데이터 필드 만 지원 합 니 다.
/**
*
*/
private void getAverageAge() {
double avgAge= mRealm.where(Dog.class).findAll().average("age");
}
/**
*
*/
private void getSumAge() {
Number sum= mRealm.where(Dog.class).findAll().sum("age");
int sumAge=sum.intValue();
}
/**
*
*/
private void getMaxId(){
Number max= mRealm.where(Dog.class).findAll().max("age");
int maxAge=max.intValue();
}
비동기 조작
대부분의 경우 Realm 의 추가 삭제 와 수정 작업 이 충분히 빠 르 고 UI 스 레 드 에서 작업 을 수행 할 수 있 습 니 다.그러나 비교적 복잡 한 첨삭 검사 나 첨삭 검사 작업 의 데이터 가 비교적 많 을 때 하위 라인 에서 조작 할 수 있다
(1) 비동기 증가:
private void addCat(final Cat cat) {
RealmAsyncTask addTask= mRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealm(cat);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
ToastUtil.showShortToast(mContext," ");
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
ToastUtil.showShortToast(mContext," ");
}
});
}
마지막 으로 Activity 나 Fragment 를 없 앨 때 비동기 작업 을 취소 합 니 다.
@Override
protected void onDestroy() {
super.onDestroy();
if (addTask!=null&&!addTask.isCancelled()){
addTask.cancel();
}
}
(2) 비동기 삭제
private void deleteCat(final String id, final ImageView imageView){
RealmAsyncTask deleteTask= mRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Cat cat=realm.where(Cat.class).equalTo("id",id).findFirst();
cat.deleteFromRealm();
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
ToastUtil.showShortToast(mContext," ");
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
ToastUtil.showShortToast(mContext," ");
}
});
}
마지막 으로 Activity 나 Fragment 를 없 앨 때 비동기 작업 을 취소 합 니 다.
@Override
protected void onDestroy() {
super.onDestroy();
if (deleteTask!=null&&!addTask.isCancelled()){
deleteTask.cancel();
}
}
(3) 비동기 수정
RealmAsyncTask updateTask= mRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Cat cat=realm.where(Cat.class).equalTo("id",mId).findFirst();
cat.setName(name);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
ToastUtil.showShortToast(UpdateCatActivity.this," ");
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
ToastUtil.showShortToast(UpdateCatActivity.this," ");
}
});
마지막 으로 Activity 나 Fragment 를 없 앨 때 비동기 작업 을 취소 합 니 다.
@Override
protected void onDestroy() {
super.onDestroy();
if (updateTask!=null&&!addTask.isCancelled()){
updateTask.cancel();
}
}
(4) 비동기 검사
RealmResults cats=mRealm.where(Cat.class).findAllAsync();
cats.addChangeListener(new RealmChangeListener>() {
@Override
public void onChange(RealmResults element) {
element= element.sort("id");
List datas=mRealm.copyFromRealm(element);
}
});
마지막 으로 Activity 나 Fragment 를 없 앨 때 비동기 작업 을 취소 합 니 다.
@Override
protected void onDestroy() {
super.onDestroy();
cats.removeChangeListeners();
}
기타 관련 설명 1. 지원 하 는 데이터 형식: boolean, byte, short, int, long, float, double, String, Date and byte [] Realm 에서 byte, short, int, long 은 최종 적 으로 log 유형 2 로 매 핑 되 었 습 니 다. 설명 @ Primary Key ① 필드 는 String, integer, byte, short, int, long 및 그들의 패 키 징 류 Byte, Short, Integer 여야 합 니 다.and Long ② 이 주 해 를 사용 한 후 copy ToRealmOrUpdate () 방법 을 사용 하여 홈 키 를 통 해 대상 을 조회 할 수 있 습 니 다. 조회 가 되면 업데이트 합 니 다. 그렇지 않 으 면 새 대상 으로 대체 할 수 있 습 니 다.③ 이 주 해 를 사용 하여 기본 설정 @ index 주 해 ④ 이 주 해 를 사용 한 후 데 이 터 를 만 들 고 업데이트 하 는 것 이 느 리 고 데 이 터 를 조회 하 는 것 이 빠 릅 니 다. @Required 데 이 터 는 null @ Ignore 에 무시 할 수 없습니다. 즉, 이 필드 는 로 컬 @ Index 에 저장 되 지 않 고 이 필드 에 검색엔진 을 추가 하면 삽입 데이터 가 느 려 지고 데이터 가 커지 지만 조회 가 빨 라 집 니 다.읽 기 성능 을 최적화 해 야 할 경우 사용 하 는 것 을 권장 합 니 다.
추천 글 은 Realm 암호 화 업그레이드 와 관련 되 어 있 습 니 다.http://www.jianshu.com/p/28912c2f31db 데모 주소:https://github.com/RaphetS/DemoRealm 안 드 로 이 드 QQ 그룹 가입 을 환영 합 니 다: 104286694
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.