日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android数据库Realm实践

發布時間:2023/12/4 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的序列化,都寫成私有的


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实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。