Android数据库新王者-Realm入门教程
来源:互联网 发布:湖人12年纳什数据 编辑:程序博客网 时间:2024/05/21 17:22
好长时间没有写关于Android方面的学习文章了,今天给大家带来的是堪称是一个可以替代SQLite以及ORMlibraries的轻量级数据库—Realm移动端数据库。
相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。
Ream提供了五种编程方式的实现。分别是Java,Objective C,Swift,React-Native,tamarin。在这里我着重介绍在Android中的使用。后面也会介绍在Swift中得使用。
1.先介绍一下打开数据Realm数据库的工具:Realm Browser可视化工具
Realm资源包中包含了一个很有用的实用工具,可以帮助我们更好地管理Realm数据库,那就是Realm Browser。Realm Browser可以让您轻松地读写Realm数据库(以.realm结尾),因此我们无需头疼如何去查看Realm专有数据库的逻辑结构以及其中的数据,可视化的操作就如同SQLite的其他数据库查看工具一样,十分简单、易用(虽然Realm Browser的功能还十分简陋,真的只能读写而已)。
2.Realm支持的数据类型
- 支持基本数据结构:boolean, byte, short, ìnt, long, float, double, String, Dateand byte[]
- 支持JSON等复杂的数据类型
3.Realm的官方名词
- Realm:Realm是框架的核心所在,是我们构建数据库的访问点,使用建造者模式构建对象。
- RealmObject:这是我们自定义的realm数据模型。创建数据模型的行为将会影响到数据库的结构。要创建一个数据模型,我们只需要继承RealmObject,然后设计我们想要存储的属性即可。
- RealmQuery(查询):要在数据库中检索信息,我们需要用到“检索”操作。如果需要检索更复杂的数据,那么还可以使用复合查询以及结果排序等等操作。
- RealmResults:这个类是执行任何查询请求后所返回的类,其中包含了一系列的Object对象。和List类似,我们可以用下标语法来对其进行访问,并且还可以决定它们之间的关系。不仅如此,它还拥有许多更强大的功能,包括排序、查找等等操作。
4、Realm在Android中的使用
4.1在项目的build.grade中配置下载库文件
在本案例中我使用的最新版本的1.0.0版本。
apply plugin: 'realm-android'buildscript { repositories { jcenter() maven { url 'https://jitpack.io' } } dependencies { classpath "io.realm:realm-gradle-plugin:1.0.0" }}
4.2创建数据库,获取去Realm
package com.lidong.demo.realm;import android.content.Context;import io.realm.Realm;import io.realm.RealmConfiguration;/****@className:RealmUtil*@desc:RealmUtil工具类*@author:lidong*@datetime:16/6/10 下午9:55*/public class RealmUtil { private static RealmUtil sIntance; public final Context mContext; private String realmName = "realm_demo.realm"; public RealmUtil(Context mContext) { this.mContext = mContext; } /** * 双检索单例 * @param context * @return */ public static RealmUtil getIntance(Context context){ if (sIntance == null) { synchronized (RealmUtil.class) { if (sIntance == null) { sIntance = new RealmUtil(context); } } } return sIntance; } /** * 获取realm对象 * @return */ public Realm getRealm(){Realm realm =Realm.getInstancenew RealmConfiguration.Builder(mContext) .name(realmName) .build()); return realm; }}
4.3创建一个RealmObject
只要继承了RealmObject类,任意JavaBean都能存储在Realm中。必须有一个默认构造器,成员变量有相应的getter/setter方法
package com.lidong.demo.realm;import io.realm.RealmObject;import io.realm.annotations.PrimaryKey;/** * Person */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 + '}'; }}
4.4对数据Person进行增删改查操作
PersonDao.java
package com.lidong.demo.realm;import java.util.List;/** * Created by lidong on 16/6/9. */public interface PersonDao { /** * 插入Person * @param person * @throws Exception */ void insert(Person person)throws Exception; /** * 获取所有的用户 * @return * @throws Exception */ List<Person> getAllPerson()throws Exception; /** * 更新用户 * @throws Exception */ Person updatePerson(Person person)throws Exception; /** * 删除用户 * @param code * @throws Exception */ void deletePerson(String code)throws Exception; /** * 异步插入Person * @param person * @throws Exception */ void insertPersonAsync(Person person)throws Exception;}
PersonDaoImp.java
package com.lidong.demo.realm;import android.content.Context;import java.util.List;import io.realm.Realm;/****@className:PersonDaoImpl*@desc:*@author:lidong*@datetime:16/6/10 下午10:01*/public class PersonDaoImpl implements PersonDao { private Context context; private Realm mRealm; public PersonDaoImpl(Context context){ mRealm = RealmUtil.getIntance(context).getRealm(); } /** * @同步插入用户 * @param person * @throws Exception */ @Override public void insert(Person person) throws Exception { mRealm.beginTransaction(); Person person1 = mRealm.copyToRealm(person); mRealm.commitTransaction(); mRealm.close(); } /** * 获取所有的用户 * * @return * @throws Exception */ @Override public List<Person> getAllPerson() throws Exception { List<Person> mlist = null; mlist = mRealm.where(Person.class).findAll(); mRealm.close(); return mlist; } /** * @param person * @throws Exception */ @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(); } /** * 异步插入Person * * @param person * @throws Exception */ @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(); } }); mRealm.close();//关闭Realm对象 }}
4.5在Activity中简单调用
package com.lidong.demo.realm;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import com.lidong.demo.R;import java.util.List;import io.realm.Realm;public class DemoRealmActivity extends AppCompatActivity { static final String TAG = DemoRealmActivity.class.getSimpleName(); Realm mRealm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo_realm);// mRealm= RealmUtil.getIntance(this).getRealm();////// mRealm.executeTransaction(new Realm.Transaction() {// @Override// public void execute(Realm realm) {// Person person = realm.createObject(Person.class);// person.setName("李东");// person.setAge(24);// person.setCode(UUID.randomUUID().toString());// }// }); Person person = new Person(); person.setName("李东1"); person.setAge(28); person.setCode("6e56d3aa-7119-429e-8c59-7ad8241e838d"); PersonDao dao = new PersonDaoImpl(this);// try {// dao.insert(person);// } catch (Exception e) {// e.printStackTrace();// } try { dao.deletePerson("6e56d3aa-7119-429e-8c59-7ad8241e838d"); } catch (Exception e) { e.printStackTrace(); } try { List<Person> persons = dao.getAllPerson(); Log.d(TAG, "onCreate: "+persons); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); }}
总结:Android中使用Realm数据库基本上就这几点步骤,这是个入门,更加复杂的操作,我在后面会慢慢的深入。
代码地址
2 0
- Android数据库新王者-Realm入门教程
- Android数据库新王者-Realm入门教程
- 移动端数据库新王者:realm
- Swift学习第十二枪----移动数据库王者Realm入门教程
- Sqlite的完美替代者,android数据库新王者——Realm
- Android数据库之Realm快速入门教程
- Realm For Android入门教程
- Realm for Android快速入门教程
- Realm for Android快速入门教程
- Realm for Android快速入门教程
- Realm for Android快速入门教程
- Realm for Android快速入门教程
- realm数据库 For android
- Android数据库Realm实践
- Android数据库Realm实践
- Android Realm数据库使用指南
- Android Realm数据库使用指南
- Android Realm数据库使用指南
- 英文文字游戏
- 9. Palindrome Number
- redis在windows64位操作系统的安装与使用
- erlang 导入库脚本
- u-boot与linux内核间的参数传递过程分析
- Android数据库新王者-Realm入门教程
- CSS3属性transform(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- Wireshark使用教程
- Java内存模型
- ListView嵌套GridView时遇到的一些坑
- Maximum Depth of Binary Tree
- csdn待改进点之5------>在PC上能顶自己博文, 但在手机app上却不能, 这种体验真的好吗?
- 文章标题
- HDU 3923 Invoker(Polya原理+费马小定理)