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에 따라 라이센스가 부여됩니다.