Android开发中常用的数据库有5个:

1. OrmLite

OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM。支持JDBC连接,Spring以及Android平台。语法中广泛使用了注解(Annotation)。

2. SugarORM

SugarORM 是 Android 平台专用ORM。提供简单易学的APIs。可以很容易的处理1对1和1对多的关系型数据,并通过3个函数save(), delete() 和 find() (或者 findById()) 来简化CRUD基本操作。

3. GreenDAO

当性能很重要时(数据访问频繁),GreenDao是一个很快的解决方案,它能够支持数千条记录的CRUD每秒,和OrmLite相比,GreenDAO要快几乎4.5倍。(准确数据请自行benchmark)。

GreenDAO小于100KB,所以对于应用程序APK的大小影响很小。

4. Active Android

Active Record(活动目录)是Yii、Rails等框架中对ORM实现的典型命名方式。Active Android 帮助你以面向对象的方式来操作SQLite。
在你的项目中包含Active Android,你需要在项目的 /libs 目录下添加一个jar文件。可以从Github中获取源代码并使用Maven进行编辑。

5. Realm

Realm 是一个将可以使用的Android ORM,基于C++编写,直接运行在你的设备硬件上(不需要被解释),因此运行很快。它同时是开源跨平台的,iOS的代码可以在GitHub找到,你还可以找到Objective C以及Swift编写的Realm使用实例。

相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。

Ream提供了五种编程方式的实现。分别是Java,Objective C,Swift,React-Native,tamarin。在这里我着重介绍在Android中的使用。

大家可以直接看官方的文档,我也是在这基础的上讲解:realm使用

快速入门

运行环境

  • 目前我们还不支持 Android 以外的 Java 环境;
  • Android Studio >= 1.5.1 ;
  • 较新的 Android SDK 版本;
  • JDK 版本 >=7;
  • 我们支持 Android API 9 以上的所有版本(Android 2.3 Gingerbread 及以上)。

构建依赖关系

第一步: 在项目的 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 文件在如下位置:

如果读者使用的是maven构建项目,官方也有说明,这里我就不列出来了。

说到这里,我们已经迫不及待的想尝试下了。

1,application里面初始化

public class RealmApplication extends Application {@Overridepublic void onCreate() {super.onCreate();init();}private void init() {RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();Realm.setDefaultConfiguration(realmConfiguration);}
}

2,创建工具管理类,获取Realm实例

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 {@PrimaryKeyprivate 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;}@Overridepublic String toString() {return "Person{" +"code='" + code + '\'' +", name='" + name + '\'' +", age=" + age +'}';}
}

4,定义几个CRUD的方法,供其它类实现

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();}@Overridepublic void insert(Person person) throws Exception {mRealm.beginTransaction();Person person1 = mRealm.copyToRealm(person);mRealm.commitTransaction();mRealm.close();}@Overridepublic List<Person> getAllPerson() throws Exception {List<Person> mlist = null;mlist =  mRealm.where(Person.class).findAll();mRealm.close();return mlist;}@Overridepublic Person updatePerson(Person person) throws Exception {mRealm.beginTransaction();Person person1 = mRealm.copyToRealmOrUpdate(person);mRealm.commitTransaction();mRealm.close();return  person1;}@Overridepublic void deletePerson(String code) throws Exception {Person person = mRealm.where(Person.class).equalTo("code",code).findFirst();mRealm.beginTransaction();person.deleteFromRealm();mRealm.commitTransaction();}@Overridepublic void insertPersonAsync(final Person person) throws Exception {//一个Realm只能在同一个线程中访问,在子线程中进行数据库操作必须重新获取Realm对象:mRealm.executeTransaction(new Realm.Transaction() {@Overridepublic void execute(Realm realm) {realm.beginTransaction();Person person1 = realm.copyToRealm(person);realm.commitTransaction();realm.close();//并且要记得在离开线程时要关闭 realm.close();}});//关闭Realm对象mRealm.close();}
}

6,测试

public class MainActivity extends AppCompatActivity {private Realm mRealm;@Overrideprotected 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();}}}

其实这和以前的用法差不多的,有点在于,realm去帮我们管理这个数据库,并且在安全上我这还没有讲到,这里只讲了基本用法,大家可以去看看官方的文档说明:

官方文档

Android数据库Realm实践相关推荐

  1. 关于Android数据库—realm的使用及理解

    一.关于Realm的理解 之前对于数据库的使用方面,只了解过sqlite,之前自己简单的写了个短信拦截的小app,存储本地短信数据使用SqliteOpenHelper,然后编写各种增删改查的语句,还好 ...

  2. Android 数据库Realm入门

    之前使用本地数据库都是用sqllite的,偶尔用一下LitePal,听人说Realm多么多么好使,但是我一直都没有去学习,今天有空去瞅了瞅,果然很不错. 它有以下几种特点: 1.易用:Ream 不是在 ...

  3. Android数据库Realm学习(一)基本使用

    Realm Java文档   技术文档,开卷有益 刚刚开始用Realm,肯定是要对比着SQLite来琢磨的,说几个个人认识: 一.SQLite中的数据库名对应Realm的啥 Realm可以简单直接使用 ...

  4. Android数据库新王者-Realm入门教程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/51629262 好长时间没有写关于Androi ...

  5. android开发收藏功能实现,Android使用Realm数据库如何实现App中的收藏功能

    Android使用Realm数据库如何实现App中的收藏功能 发布时间:2021-05-07 11:20:34 来源:亿速云 阅读:63 作者:小新 这篇文章主要介绍了Android使用Realm数据 ...

  6. android收藏功能demo,Android使用Realm数据库实现App中的收藏功能(代码详解)

    前 言 App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式: 使用SharedPreferences存储数据: 文件存储数据: SQLite数据 ...

  7. 【Android】Realm详解(Android 数据库Sqlite的完美替代者)

    介绍 Realm 是一个 MVCC (多版本并发控制)数据库,由Y Combinator公司在2014年7月发布一款支持运行在手机.平板和可穿戴设备上的嵌入式数据库,目标是取代SQLite. Real ...

  8. 深入解析Sqlite的完美替代者,android数据库新王者——Realm

    写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里给大家补刀,所以我觉得今天不虐狗,继续给大家分享有用的. 如果你比较关心androi ...

  9. Android软件安全开发实践(下)

    Android软件安全开发实践(下) Android开发是当前最火的话题之一,但很少有人讨论这个领域的安全问题.本系列将分两期,探讨Android开发中常见的安全隐患和解决方案.第一期将从数据存储.网 ...

最新文章

  1. 海思3536:kernel编译和mpp_single编译过程报错及解决方法
  2. 盘点:2020年PMCAFF最受欢迎的文章!
  3. 事务处理总结【JDBC事务|JTA事务|容器事务
  4. 洛谷 1226 取余运算||快速幂
  5. Android版本演进中的兼容性问题
  6. 前端学习(2160):vuecli项目初始化过程
  7. 查看文件时间及修改(MACN,stat命令,touch命令)
  8. zookeeper观察者模式设计实例
  9. 表格用计算机做成横版的WPS,WPS表格怎么将表格横过来图文教程
  10. echarts中国以及各省市地图数据
  11. 世界著名激励大师约翰·库缇斯的传奇人生
  12. 复信号在信号处理中的意义
  13. a标签去掉下划线,html,超链接去掉下划线
  14. 计算机中丢失msvcp120.dll是什么意思,win7系统玩游戏提示“msvcp120.dll丢失”怎么修复...
  15. JVM3--垃圾回收机制:垃圾回收概述、垃圾回收算法及分类
  16. ztext - 简单几行代码创建酷炫 3D 特效文字的开源 JS 库
  17. 常见的医学图像成像(总)
  18. 在PowerPoint 2010中向幻灯片添加过渡效果
  19. Angular 4 Http
  20. 虚拟服务器ip怎么配,怎么配置基于IP地址的虚拟主机

热门文章

  1. powerpoint技巧_几乎每个PowerPoint都烂鸡蛋
  2. 送你一份用Electron开发桌面应用的避坑指南【送3本书,含犀牛书】
  3. java 抽象类与接口理解
  4. Ubuntu 18.04下命令安装VMware Tools
  5. 使用SysPrep制作Windows2008系统映像
  6. Building a Space Station--POJ 2031
  7. iis php网站500错误原因_因为曾经错误安装过PHP5.2而导致IIS7无法正常工作,显示500错误提示,大家帮忙看看!...
  8. JIRA的text编辑模式
  9. static作用:静态变量的生存周期和作用域
  10. 数据结构——不相交集(并查集)