Android数据库Realm实践
生活随笔
收集整理的這篇文章主要介紹了
Android数据库Realm实践
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android開發中常用的數據庫有5個:
1.?OrmLite
OrmLite 不是 Android 平臺專用的ORM框架,它是Java ORM。支持JDBC連接,Spring以及Android平臺。語法中廣泛使用了注解(Annotation)。
2.?SugarORM
SugarORM 是 Android 平臺專用ORM。提供簡單易學的APIs??梢院苋菀椎奶幚?對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文件??梢詮腉ithub中獲取源代碼并使用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的序列化,都寫成私有的
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实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用CDN引用jQuery
- 下一篇: Android延时执行调用的几种方法