91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Android中使用Room數據庫

發布時間:2021-03-29 16:07:00 來源:億速云 閱讀:216 作者:Leah 欄目:移動開發

本篇文章為大家展示了如何在Android中使用Room數據庫,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Room是什么?

Room是一個持久性數據庫。

Room持久性庫提供了SQLite的抽象層,以便在充分利用SQLite的同時允許流暢的數據庫訪問。

為什么會選擇Room?

前面我也說到了現在也有不少開源的數據庫給大家使用,那為什么我們還要去學習使用這個庫呢?當然不是我前面說的“正不正統”的原因了。

因為Room有下面幾個優點:

① SQL查詢在編譯時就會驗證 - 在編譯時檢查每個@Query和@Entity等,這就意味著沒有任何運行時錯誤的風險可能會導致應用程序崩潰(并且它不僅檢查語法問題,還會檢查是否有該表)

② 較少的模板代碼

③ 與 LiveData 集成

該如何使用它?

1、在app/build.gradle中添加以下依賴

implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'

你可以點擊這里查看最新依賴版本號

2、創建JavaBean

@Entity
public class User {
 
 @PrimaryKey(autoGenerate = true)//主鍵是否自動增長,默認為false
 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;
 }
 //這里的getter/setter方法是必須的
 //這里的getter/setter方法是必須的
 //這里的getter/setter方法是必須的
 //重要的事說三遍
}

這里需要使用 @Entity 來注解該類

至少要有一個主鍵 @PrimaryKey

3、創建Dao

接下來,需要為我們的實體創建DAO。 DAO代表數據訪問對象,所以它是告訴我們的數據庫如何操作數據的一種方式:

@Dao
public interface UserDao {
 @Query("SELECT * FROM user")
 List<User> getAllUsers();

 @Insert
 void insert(User... users);

 @Update
 void update(User... users);

 @Delete
 void delete(User... users);
}

使用 @Dao 注解該接口

@Insert , @Update , @Delete , @Query 代表我們常用的 插入 、 更新 、 刪除 、 查詢 數據庫操作

@Insert , @Update , @Delete 可以傳入多種不同的參數。例如:

@Insert
void insert(User... users);

@Insert
void insert(User user);

@Insert
void insert(List<User> userLists);

同理, @Query 也可以返回多種不同的類型。

@Query("SELECT * FROM user")
List<User> getAllUsers();

@Query("SELECT * FROM user WHERE id=:id")
User getUser(int id);

@Query("SELECT * FROM user")
Cursor getUserCursor();

當然,除了這些我們還可以傳入一些限制符進去。例如,

@Query("SELECT * FROM user WHERE age=:age")
List<User> getUsersByAge(int age);

@Query("SELECT * FROM user WHERE age=:age LIMIT :max")
List<User> getUsersByAge(int max, int... age);

4、創建數據庫

@Database(entities = { User.class }, version = 1,exportSchema = false)
public abstract class UserDatabase extends RoomDatabase {

 private static final String DB_NAME = "UserDatabase.db";
 private static volatile UserDatabase instance;

 static synchronized UserDatabase getInstance(Context context) {
 if (instance == null) {
  instance = create(context);
 }
 return instance;
 }

 private static UserDatabase create(final Context context) {
 return Room.databaseBuilder(
  context,
  UserDatabase.class,
  DB_NAME).build();
 }

 public abstract UserDao getUserDao();
}

這里使用 @Database 注解該類并添加了 表名 、 數據庫版本 (每當我們改變數據庫中的內容時它都會增加),所以這里使用 exportSchema = false

注意:除了添加表映射的類以及和數據庫版本外,還要添加 exportSchema = false 否則會報警告。

Error:(10, 17) 警告: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide room.schemaLocation annotation processor argument OR set exportSchema to false.

我們抽象了 getUserDao() 方法,這是必要的。

5、使用數據庫

我們終于能夠操作我們的數據庫了。但是所有的操作必須在后臺線程中完成。你可以通過使用 AsyncTask , Thread , Handler , RxJava 或其它方式來完成。

如果沒有在后臺線程執行,并且也沒有說明可以在主線程操作的話,就會報以下錯誤。

Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

例如,我們可以像下面這樣插入數據

User user=new User();
user.setName("name1");
user.setAge(18);
UserDatabase
 .getInstance(context)
 .getUserDao()
 .insert(user);

或者這樣

List<User> allUsers = UserDatabase
 .getInstance(RoomActivity.this)
 .getUserDao()
 .getAllUsers();

上述內容就是如何在Android中使用Room數據庫,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达拉特旗| 松阳县| 涡阳县| 山阴县| 禹城市| 枣阳市| 麻阳| 张掖市| 洛南县| 永州市| 大石桥市| 板桥市| 广安市| 台前县| 哈密市| 射洪县| 逊克县| 芒康县| 云霄县| 筠连县| 云安县| 百色市| 射阳县| 色达县| 凤山市| 郴州市| 繁峙县| 长汀县| 德江县| 全州县| 福贡县| 德兴市| 柳林县| 渭源县| 罗定市| 东阳市| 元江| 铜梁县| 宁海县| 和林格尔县| 方城县|