12/08/2018, 15:09

Realm database cho Android - Giải pháp thay thế SQlite

Realm là một cơ sở dữ liệu (CSDL) nguồn mở, sử dụng ORM, hoàn toàn miễn phí khi sử dụng, kể cả những sản phẩm thương mại. Realm lưu dữ liệu trên bộ nhớ trong. Realm hỗ trợ đa nền tảng (hiện tại là Android, iOS, OSX), file CSDL có thể chia sẻ dễ dàng giữa các nền tảng trên. Realmluôn giữ tư tưởng ...

Realm là một cơ sở dữ liệu (CSDL) nguồn mở, sử dụng ORM, hoàn toàn miễn phí khi sử dụng, kể cả những sản phẩm thương mại. Realm lưu dữ liệu trên bộ nhớ trong. Realm hỗ trợ đa nền tảng (hiện tại là Android, iOS, OSX), file CSDL có thể chia sẻ dễ dàng giữa các nền tảng trên. Realmluôn giữ tư tưởng nâng cao hiệu năng và giữ vững độ ổn định. Kết quả benchmark (có source code) cho thấy Realm nhanh hơn khoảng 2-10 lần trong các tác vụ đọc, ghi so với SQLitethuần và một số thư viện ORM phổ biến hiện nay.

Để sử dụng Realm trong Proejct, bạn cần compile Realm trong file build.gradle

classpath "io.realm:realm-gradle-plugin:3.1.3"

Để tạo Realm mới, bạn có thể gọi phương thức tĩnh Realm.getInstance từ bên trong bất kỳ Activity.

Realm myRealm = Realm.getInstance(context);

Nếu bạn muốn thêm một Realm khác trong ứng dụng, bạn phải sử dụng một đối tượng RealmConfiguration.Builder và đặt cho nó một cái tên duy nhất :

Realm myOtherRealm =
        Realm.getInstance(
                new RealmConfiguration.Builder(context)
                        .name("myOtherRealm.realm")
                        .build()
);

Bất kì một đối tượng JavaBean nào cũng có thể được lưu trữ trongRealm nếu nó kế thừ từ lớp RealmObject. JavaBean là gì, chỉ đơn giản một lớp Java đó là serializable, có một constructor mặc định, và có getter/setter cho các biến thành viên của nó. Ở đây chúng ta sẽ tạo 1 Object User

public class User extends RealmObject {
 
    @PrimaryKey
    private String name;
    private int age;

    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;
    }

}

Trong khi đọc dữ liệu từ Realm là rất đơn giản, bạn sẽ thấy trong các bước tiếp theo, ghi dữ liệu vào nó sẽ hơi phức tạp hơn. Để bắt đầu một transaction, sử dụng phương thức beginTransaction. Tương tự, để kết thúc một transaction, sử dụng phương thức commitTransaction.

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        insertUser();
        updateUser();
        deleteUser();
        getListUser();
    }
 
    private void insertUser() {
        Realm realm = Realm.getInstance(this);
        realm.beginTransaction();
        User user = realm.createObject(User.class);
        user.setSessionId(1);
        user.setName("ABC");
        user.setAge(20);
        realm.commitTransaction();
    }
     
     private void updateUser() {
        Realm realm = Realm.getInstance(this);
        realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            User user = realm.createObject(User.class);
            user.setName("Chiken");
            user.setAge(10);
            realm.copyToRealmOrUpdate(user);
        }
    }); 

 }
    
    private void deleteUser() {
        Realm realm = Realm.getInstance(this);
        realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            User  user = realm.where(User.class).findFirst();;
            realm.deleteFromRealm(user);
        }
    }); 
         
    }
    
    private void  getListUser() {
        Realm realm = Realm.getInstance(this);
        RealmResults<User>  user = realm.where(User.class).findAll()
    }
}

Chúc các bạn thanh công!

0