使用 Room DAO 存取資料 (Room)

要使用 Room 存取資料,需要使用 DAO。 這組 DAO 物件形成了 Room 的主要組件,因為每個 DAO 都包含提供對資料庫的抽象訪問方法。 通過使用 DAO 類別而不是查詢構建器或直接查詢來訪問資料庫,使用者可以分離出資料庫架構的不同元件。 此外,DAO 可在測試應用程序時輕鬆模擬資料庫訪問。 注意: 在加入 DAO 類別之前,先在 app 的 build.gradle 加入相依性。 DAO 可以是 interface,也可以是抽象類別。如果是抽象類別,它可以選擇有一個構造函數,它將 RoomDatabase 作為唯一的參數。Room 在編譯時期建立每個 DAO 實作。 注意: Room 並不支援在 Main thread 上存取資料庫,因為可能會長時間鎖定 UI。 如果要讓 Room 支援在其他執行緒存取資料庫則必須在建構時呼叫allowMainThreadQueries() 方法。 異步查詢 – 若是查詢會返回 LiveData 或 Flowable 實例 - 不受此規則的約束,因為它們在需要時在後台線程上異步運行查詢   Define methods for convenience 可以使用 DAO 類別表示多個便捷查詢。 Insert 當建立 DAO 方法並使用 @Insert 註釋時,Room 會生成一個實現,該實現在單一事務(single transaction)中將所有參數插入到資料庫中。 @Dao public interface MyDao { @Insert(onConflict = OnConflictStrategy.REPLACE) ...

在資料庫中建立 View (Room)

Room 2.1.0 及更高版本提供對 SQLite 資料庫的 View 功能,允許使用者將查詢封裝到類別中。Room 將這些查詢支持的類別稱為 View,作用和使用 DAO 的簡單資料物件相同。 注意: 與實體(Entitiy)一樣,可以針對 View 運行 SELECT 語句。但是無法對 View 進行 INSERT, UPDATE 或 DELETE 語句。   Create a view 要建立 View,請將 @DatabaseView 註釋加入類別。將註釋的值設置為該類別應表示的查詢。以下代碼段提供了一個 View 範例: @DatabaseView("SELECT user.id, user.name, user.departmentId," + "department.name AS departmentName FROM user " + "INNER JOIN department ON user.departmentId = department.id") public class UserDetail { public long id; public String name; public long departmentId; public String departmentName; }     Associate a view with your database 要將該 View 作為資料庫的一部分,請在 @Database 註釋中加入 views 屬性 @Database(entities...

使用 Room entities 定義資料 (Room)

使用 Room 時,可以將相關的屬性定義為實體(entities)。 對於每個實體,將會創建一個資料表來保存項目在 Database 物件中,必須透過 Database 類別中的 entities 陣列來引用實體類別。 以下示範如何定義一個實體(entity) @Entity public class User { @PrimaryKey public int id; public String firstName; public String lastName; } 為了保存屬性,Room 必須去存取它。可以透過將該屬性設定為 public 或提供 getter 和 setter 存取器。若是使用存取器必須注意該存取器必須符合 JavaBeans 的命名規則。 注意: 實體(Entity)可以有一個空構造函數(如果相應的 DAO 類別可以訪問每個持久化字段),或者一個構造函數,其參數包含與實體中的屬性匹配的類型和名稱。Room 也可以使用完整或部分構造函數,例如只接收某些屬性的構造函數。 Use a primary key 每個實體必須至少定義一個屬性作為主鍵。即使只有一個屬性,仍需要使用 @PrimaryKey 註釋來註釋該屬性。 此外,如果希望 Room 為實體分配自動 ID,可以設定 @PrimaryKey 的 autoGenerate 屬性。 如果實體具有複合主鍵,則可以使用 @Entity 註釋的 primaryKeys 屬性,如以下代碼段所示: @Entity(primaryKeys = {"firstName", "lastName"}) public class...

在本地端資料庫儲存資料 (Room)

在 Room 中有 3 個主要的元件 1.Database: 包含資料庫持有者(database holder),並作為應用程序的持久化數據基礎的主要訪問點。 使用 @Database 註釋的類別需要滿足以下條件: 是一個抽象類別並繼承 RoomDatabase 類別 在註釋加入與資料庫關聯的實體列表 包含一個具有0個參數的抽象方法,並返回使用 @Dao 註釋的類別 在程式運行時,可以通過呼叫 Room.databaseBuilder() 或 Room.inMemoryDatabaseBuilder()來獲取 Database 實體。 2.Entity: 表示為資料庫中的資料表。 3.DAO: 包含用於訪問資料庫的方法。 應用程序使用 Room 資料庫來獲取與該資料庫關聯的數據訪問對像(DAO)。接著,應用程序使用每個 DAO 從資料庫中獲取實體,並將對這些實體的任何更改保存回資料庫。最後,應用程序使用實體來獲取和設置與資料庫中的表列對應的值。 如下圖所示 以下的範例為包含一個 entity 和一個 dao 的資料庫 User.java @Entity public class User { @PrimaryKey public int uid; @ColumnInfo(name = "first_name") public String firstName; @ColumnInfo(name = "last_name")...

Room 基本紀錄

什麼是 Room? Room 是 Android 官方所提供的ORM,可快速方便的存取 SQLite。 基本上 Room 為 SQLite 提供了一個抽象層,該層透過使用SQLite 實現更強大的資料庫存取功能。 處理大量結構化數據的應用程序可以從本地持久化保存數據中獲得好處。最常見的範例是當設備無法使用網絡時緩存相關的數據,讓用戶仍然可以在離線時瀏覽該內容。之後在設備重新連上網路時,任何更改的內容都會同步到服務器。 強烈建議使用 Room 而不是 SQLite。 使用 Room 在本地端資料庫儲存資料 Orignal From: Room 基本紀錄...

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews