标签:
Android开发中常用的数据库有5个:
GreenDAO小于100KB,所以对于应用程序APK的大小影响很小。
相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。
Ream提供了五种编程方式的实现。分别是Java,Objective
C,Swift,React-Native,tamarin。在这里我着重介绍在Android中的使用。
大家可以直接看官方的文档,我也是在这基础的上讲解:realm使用
快速入门:
第一步: 在项目的 build.gradle 文件中添加如下 class path 依赖。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:1.0.0"
}
}
项目的 build.gradle 文件在如下位置:
第二步: 在 app 的 build.gradle 文件中应用 realm-android 插件。
apply plugin: ‘realm-android‘
app的 build.gradle 文件在如下位置:
说到这里,我们已经迫不及待的想尝试下了。
1,application里面初始化
public class RealmApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
init();
}
private void init() {
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();
Realm.setDefaultConfiguration(realmConfiguration);
}
}public class RealmUtils {
private static RealmUtils instance;
public final Context mContext;
private String realmName = "realm_demo.realm";
public RealmUtils(Context mContext) {
this.mContext = mContext;
}
public static RealmUtils getInstance(Context context){
if (instance == null) {
synchronized (RealmUtils.class) {
if (instance == null) {
instance = new RealmUtils(context);
}
}
}
return instance;
}
public Realm getRealm(){
Realm realm =Realm.getInstance(new RealmConfiguration.Builder(mContext).name(realmName).build());
return realm;
}
}3,创建一个realmObject对象,存储object
例如,我们现在需要存储一个人(Person)对象,注意,这里的成员属性为了realm的序列化,都写成私有的
public class Person extends RealmObject {
@PrimaryKey
private String code;//编号
private String name;//姓名
private int age;//年龄
public Person() {
}
public Person(int age, String code, String name) {
this.age = age;
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
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;
}
@Override
public String toString() {
return "Person{" +
"code='" + code + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}public interface PersonDao {
//插入
void insert(Person person) throws Exception;
//查询
List<Person> getAllPerson() throws Exception;
//更新
Person updatePerson(Person person) throws Exception;
//删除
void deletePerson(String code) throws Exception;
// 异步插入
void insertPersonAsync(Person person) throws Exception;
}5,对象的具体实现
public class PersonDaoImpl implements PersonDao {
private Context context;
private Realm mRealm;
public PersonDaoImpl(Context context){
mRealm = RealmUtils.getInstance(context).getRealm();
}
@Override
public void insert(Person person) throws Exception {
mRealm.beginTransaction();
Person person1 = mRealm.copyToRealm(person);
mRealm.commitTransaction();
mRealm.close();
}
@Override
public List<Person> getAllPerson() throws Exception {
List<Person> mlist = null;
mlist = mRealm.where(Person.class).findAll();
mRealm.close();
return mlist;
}
@Override
public Person updatePerson(Person person) throws Exception {
mRealm.beginTransaction();
Person person1 = mRealm.copyToRealmOrUpdate(person);
mRealm.commitTransaction();
mRealm.close();
return person1;
}
@Override
public void deletePerson(String code) throws Exception {
Person person = mRealm.where(Person.class).equalTo("code",code).findFirst();
mRealm.beginTransaction();
person.deleteFromRealm();
mRealm.commitTransaction();
}
@Override
public void insertPersonAsync(final Person person) throws Exception {
//一个Realm只能在同一个线程中访问,在子线程中进行数据库操作必须重新获取Realm对象:
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.beginTransaction();
Person person1 = realm.copyToRealm(person);
realm.commitTransaction();
realm.close();//并且要记得在离开线程时要关闭 realm.close();
}
});
//关闭Realm对象
mRealm.close();
}
}public class MainActivity extends AppCompatActivity {
private Realm mRealm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
Person person = new Person();
person.setName("测试");
person.setAge(28);
person.setCode("xxxx");
PersonDao dao = new PersonDaoImpl(this);
try {
//增加
dao.insert(person);
//查询全部
dao.getAllPerson();
//指定code删除
dao.deletePerson("xxxx");
//更新
dao.updatePerson(person);
} catch (Exception e) {
e.printStackTrace();
}
}
}
标签:
原文地址:http://blog.csdn.net/xiangzhihong8/article/details/52130018