Android Studio 1.5.1 或者更高版本; JDK 版本 >=7; 較新的 Android SDK 版本; 支持 Android API 9 以上的所有版本(Android 2.3 Gingerbread 及以上)。
Realm Java 讓你能夠高效地編寫 app 的模型層代碼,保證你的數據被安全、快速地存儲。
A.在module的build.gradle中添加如下代碼:
apply plugin: 'realm-android'
如圖所示:
1.png
B.在project的build.gradle中添加如下代碼:
classpath "io.realm:realm-gradle-plugin:3.5.0"
如圖所示:
1.png
現在基本配置已經弄好了,可以開始操作一波了。
在做這些操作之前我們需要新建model類(類似sqlite的新建表),這里我們需要繼承RealmObject才能被存儲在數據庫中。
public class Person extends RealmObject{ private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } 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; }}
表已經建好了,這時候可以對它CRUD(create/read/update/delete)了。 a.新增數據 這里需要說一下,新增數據操作需要在事務進行。如下所示:
Realm mRealm = Realm.getDefaultInstance();//獲取Realm實例 mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { //Add a person Person person = realm.createObject(Person.class); person.setId(1); person.setName("Young Person"); person.setAge(14); } });
或者
Realm mRealm = Realm.getDefaultInstance();//獲取Realm實例 mRealm.beginTransaction(); //Add a person Person person = realm.createObject(Person.class); person.setId(1); person.setName("Young Person"); person.setAge(14); mRealm.commitTransaction();
b.查詢數據
Realm mRealm = Realm.getDefaultInstance();//獲取Realm實例 final Person person = mRealm.where(Person.class).findFirst();//查詢第一條數據相關查詢API如下所示:1?? average(String fieldName) ->返回給定字段的平均值2?? beginGroup ->開始條件分組(“左括號”)3?? beginsWith(String fieldName,String value) ->查詢以“value”開頭的“fieldName”4?? between(String fieldName,float from,float to) ->查詢fieldName字段在"from"和to之間
好了,方法挺多的,這里就舉幾個例子,順便給出Realm API網址(https://realm.io/docs/java/3.5.0/api/)有興趣的可以去看一下。
c.更新數據
Realm mRealm = Realm.getDefaultInstance();//獲取Realm實例 final Person person = mRealm.where(Person.class).findFirst();//查詢第一條數據//更新第一條數據 mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { person.setName("Senior Person"); person.setAge(88); } });
d.刪除數據
Realm mRealm = Realm.getDefaultInstance();//獲取Realm實例 mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { //清空Person表 realm.delete(Person.class); } });
所有數據庫都要處理模型改變的情況。Realm 的數據模型用標準 Java 對象來定義,改變數據模型只需要改變數據對象定義即可。 Application中需要如下自定義配置:
// Initialize Realm. Should only be done once when the application starts. Realm.init(this); RealmConfiguration myConfig=new RealmConfiguration.Builder() .schemaVersion(REALM_VERSION) .migration(new MyConfigMigration()) .name("myrealm.realm") .build(); Realm.setDefaultConfiguration(myConfig);
這時候我們需要自定義Migration
public class MyConfigMigration implements RealmMigration { public static final String TAG = "ez"; @Override public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { realmUpdate((int) oldVersion,realm); //官方寫法// if (oldVersion == 0 && newVersion == 1) {// version1(realm);// ++oldVersion;// }//// if (oldVersion == 1 && newVersion == 2) {// version2(realm);// ++oldVersion;// } } /** * realm數據庫遷移(升級) * 降級:需要使用if判斷來處理 * @param oldVersion * @param realm */ private void realmUpdate(int oldVersion, DynamicRealm realm) { switch (oldVersion) { case 0: version1(realm); case 1: version2(realm); default: break; } } /** * version=1時,增加fullName,刪除name。 * <p> * 注意:添加字段時,對應的model也要對應添加(如果標記的不為空,那么model也必須注解不為空),刪除字段時,對應的model也要刪除, * * @param realm */ private void version1(DynamicRealm realm) { RealmSchema schema = realm.getSchema(); RealmObjectSchema personSchema = schema.get("Person"); personSchema.addField("fullName", String.class, FieldAttribute.REQUIRED) .transform(new RealmObjectSchema.Function() { @Override public void apply(DynamicRealmObject obj) { obj.set("fullName", obj.get("name") + "Full"); } }) .removeField("name"); } /** * version=2時,增加了Pet類。 */ private void version2(final DynamicRealm realm) { RealmSchema schema = realm.getSchema(); //創建對應表和表字段 RealmObjectSchema petSchema = schema.create("Pet") .addField("name", String.class, FieldAttribute.REQUIRED) .addField("type", String.class, FieldAttribute.REQUIRED); //將創建的表添加到Person表中 schema.get("Person") .addRealmListField("pets", petSchema) .transform(new RealmObjectSchema.Function() { @Override public void apply(DynamicRealmObject obj) { if (obj.getString("fullName").equals("Senior PersonFull")) { DynamicRealmObject pet = realm.createObject("Pet"); pet.setString("name", "Jemos"); pet.setString("type", "cat"); obj.getList("pets").add(pet); } } }); }}
當我們每次增加schemaVersion的值時,數據庫就會走升級操作。 好了,上面就是Realm的基本用法。詳細用法請參考官網: a、中文版(版本3.1.1)https://realm.io/cn/docs/java/latest/#migrations b、英文版(版本3.5.0)https://realm.io/docs/java/latest/ c、官方Realm使用Demo https://github.com/realm/realm-java
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
沈陽廣全中學報名需要什么條件?沈陽市廣泉中學只要有學籍和初中都可以報名。廣泉沖蕩是一所民辦高中,省級高級示范中學。這個學校的軟硬件條件不錯,但是學費不低。廣全中學高中部在沈陽排名?高級中學在沈陽排名靠前,廣泉中學也是非常有名的民辦中學。它的教學質量很好,高考升學率很高,所以在沈陽的排名是名列前茅的。沈陽廣泉中學建立時間?沈陽市廣泉中學創建于1993年,是沈陽市一所歷史悠久的民辦中學,也是沈陽市升學...
蘋果手機怎么把天氣設置在通知欄?工具/原材料:蘋果6s手機。1.首先,向下滑動iPhone的主界面。2.然后找到編輯并點擊它。3.然后找到天氣,點擊左邊的加號鍵。4.最后,單擊屏幕右上角的Finish。完成此設置后,天氣將被添加到通知欄中。蘋果手機怎么把天氣設置在通知欄?工具/原材料:蘋果6s手機。1.首先,向下滑動iPhone的主界面。2.然后找到編輯并點擊它。3.然后找到天氣,點擊左邊的加號鍵...
1分1981硬幣值多少錢? 1981年1分硬幣價值3000-4000元。1981年的一便士只出現在1981年的《硬幣》紀念套裝中。這套年度套幣主要是作為錢幣收藏贈送或出售給外賓,在流通領域根本找不到。此外,1979年的五分硬幣和1980年的兩分五分硬幣也是如此,所以這五種硬幣統稱為 "五大天王 "在新的硬硬幣。1981年硬幣套產量為23400套。在1分1981硬幣值多少錢?,1981年的1便士約合...