亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android使用Room數據庫解決本地持久化的操作

 更新時間:2024年09月18日 09:33:07   作者:吃漢堡吃到飽  
Room 是一個持久性庫,屬于 Android Jetpack 的一部分,Room 是 SQLite 數據庫之上的一個抽象層,Room 并不直接使用 SQLite,而是負責簡化數據庫設置和配置以及與數據庫交互方面的瑣碎工作,本文介紹了Android使用Room數據庫解決本地持久化的操作,需要的朋友可以參考下

Room概述

Room 是一個持久性庫,屬于 Android Jetpack 的一部分。

Room 是 SQLite 數據庫之上的一個抽象層。Room 并不直接使用 SQLite,而是負責簡化數據庫設置和配置以及與數據庫交互方面的瑣碎工作。此外,Room 還提供 SQLite 語句的編譯時檢查。

Room主要組件

Room 包含三個主要組件:

  • 數據實體表示應用的數據庫中的表。數據實體用于更新表中的行所存儲的數據以及創(chuàng)建新行供插入。
  • 數據訪問對象 (DAO) 提供應用在數據庫中檢索、更新、插入和刪除數據所用的方法。
  • 數據庫類持有數據庫,并且是應用數據庫底層連接的主要訪問點。數據庫類為應用提供與該數據庫關聯的 DAO 的實例。

Room各組件之間協(xié)同工作圖例

img

添加Room庫

在build.gradle文件中添加依賴:

dependencies {
        //Room
        def room_version = "2.5.0"
        implementation "androidx.room:room-runtime:$room_version"
        annotationProcessor "androidx.room:room-compiler:$room_version"
}

版本號請查閱官方文檔:

https://developer.android.google.cn/jetpack/androidx/releases/room?hl=zh_cn#groovy

創(chuàng)建Item 實體—Entity

實體類定義了一個表,每個實例都是表的某一行。用映射的方式,實體類告知Room數據庫,它應如何呈現數據庫中的信息并與之交互。

image-20240917201608505

@Entity 注解用于將某個類標記為數據庫實體類。對于每個實體類,系統(tǒng)都會創(chuàng)建一個數據庫表來保存相關項。存儲在數據庫中的每個實體實例必須有一個主鍵,用于唯一標識數據庫表中的每個記錄/條目。主鍵一旦賦值就不能修改,只要它還存在于數據庫中,它就表示相應的實體對象。

在類之前加上 @Entity 注解來標識數據庫的實體,編譯時,系統(tǒng)便會根據這個類的設定來創(chuàng)建數據庫。

@Entity()
public class Word{

}

如果Entity()的參數為空,系統(tǒng)在創(chuàng)建數據庫時,會把類名作為數據庫的表名,如果要自定義表名,可以直接在Entity()里輸入參數:

@Entity(tableName = "yourTableName")

接下來,我們應該添加:

  • 數據庫的元素
  • 主鍵:每一個實體至少定義一個字段作為主鍵??梢詫PrimaryKey的autoGenerate屬性設置為true來設置自動id。如果實體有一個復合的主鍵,可以使用 @Entity的primaryKeys屬性來指定主鍵。

元素包括:

  • id
  • word
  • chineseMearning
@PrimaryKey(autoGenerate = true)
private  int id;
@ColumnInfo(name = "english_word")
private String word;
@ColumnInfo(name = "chinese_mearning")
private String chineseMeaning;

再加上幾個get/set方法就定義完成了!

創(chuàng)建item 數據訪問對象—Dao

新建一個MyDao對象的接口作為數據庫操作的接口,在這個接口中,我們定義數據庫的增刪改查操作,在此之前,我們需要用 @Dao 來標記這個類為Dao類:

例如:

@Dao    //Database access object
public interface WordDao {
    @Insertvoid  
    insertWords(Word... words);
    
    @Updateint 
    updateWords(Word... words);
    
    @Deletevoid 
    deleteWords(Word...words);
}

如果我們要使用SQL語句,我們可以這么寫:

@Dao    //Database access object
public interface WordDao {
    @Insertvoid  
    insertWords(Word... words);
    
    @Updateint 
    updateWords(Word... words);
    
    @Deletevoid 
    deleteWords(Word...words);
    
    @Query("DELETE FROM WORD")
    void deleteWords();
    
    @Query("SELECT * FROM WORD ORDER BY ID DESC")
    List<Word> getAllWords();
}

創(chuàng)建數據庫實例—Database

我們將創(chuàng)建database類,通過繼承改寫room的database,把word.classwordDao.class聯系在一起,組成一個完整的數據庫。

在同一個位置新建一個WordDatabase的數據庫,父類是androidx.room.RoomDatabase,為abstract類型。

我們通過@Database()來標記這個類為database類,在它的參數中我們可以定義:

  • entities:傳入所有Entity的class對象;
  • version:數據庫版本號。
  • exportSchema:設置是否導出數據庫schema,默認為true,需要在build.gradle中設置:

當數據庫發(fā)生改變時,數據庫版本號會接著改變,以便更好的進行備份恢復,這里我們用不到,就隨便設計一個值。

上面的Database()中,我們已經把Entity連接到了database中,在Dao類中,我們需要把wordDao類連接到數據庫中,我們就需要實例化一個WordDao類:

@Database(entities = {Word.class},version = 1, exportSchema = false)
public abstract class WordDatabase extends RoomDatabase {
    public abstract WordDao getWordDao();
}

使用Room數據庫

獲取AppDatabase實例:

AppDatabase wordDatabase = Room.databaseBuilder(getApplicationContext(),AppDatabase.class, "user.db").build();

使用Room可以參考:

wordDao = wordDatabase.getWordDao();  // new a dao

List<Word> list = wordDao.getAllWords();  //get all data from database with sql: select * from word

結語

以上就是Android使用Room數據庫解決本地持久化的操作的詳細內容,更多關于Android Room本地持久化的資料請關注腳本之家其它相關文章!

相關文章

  • 雙緩沖技術實現Android 畫板應用

    雙緩沖技術實現Android 畫板應用

    這篇文章主要介紹了Android 采用雙緩存技術實現畫板應用的相關資料,并附有代碼實例,有需要的小伙伴可以參考下
    2016-07-07
  • 分析Android常見的內存泄露和解決方案

    分析Android常見的內存泄露和解決方案

    內存泄漏(Memory Leak)是指程序中己動態(tài)分配的堆內存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內存的浪費,導致程序運行速度減慢甚至系統(tǒng)崩潰 (OOM) 等嚴重后果
    2021-06-06
  • Flutter上線項目實戰(zhàn)記錄之路由篇

    Flutter上線項目實戰(zhàn)記錄之路由篇

    這篇文章主要給大家介紹了關于Flutter上線項目實戰(zhàn)記錄之路由篇的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Flutter具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • Android RenderScript實現高斯模糊

    Android RenderScript實現高斯模糊

    這篇文章主要為大家詳細介紹了Android RenderScript實現高斯模糊的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 解決Android SDK下載和更新失敗的方法詳解

    解決Android SDK下載和更新失敗的方法詳解

    本篇文章是對Android SDK下載和更新失敗的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Android xmlns 的作用及其自定義實例詳解

    Android xmlns 的作用及其自定義實例詳解

    這篇文章主要介紹了 Android xmlns 的作用及其自定義實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • Android實現登錄注冊功能

    Android實現登錄注冊功能

    這篇文章主要為大家詳細介紹了Android實現登錄注冊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 詳解Android Selinux 權限及問題

    詳解Android Selinux 權限及問題

    本篇文章主要介紹了詳解Android Selinux 權限及問題,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • RxJava 1升級到RxJava 2過程中踩過的一些“坑”

    RxJava 1升級到RxJava 2過程中踩過的一些“坑”

    RxJava2相比RxJava1,它的改動還是很大的,那么下面這篇文章主要給大家總結了在RxJava 1升級到RxJava 2過程中踩過的一些“坑”,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下來要一起看看吧。
    2017-05-05
  • android BitmapFactory.Options使用方法詳解

    android BitmapFactory.Options使用方法詳解

    這篇文章主要為大家詳細介紹了android BitmapFactory.Options使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論