最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用Room數(shù)據(jù)庫解決本地持久化的操作

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

Room概述

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

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

Room主要組件

Room 包含三個主要組件:

  • 數(shù)據(jù)實體表示應(yīng)用的數(shù)據(jù)庫中的表。數(shù)據(jù)實體用于更新表中的行所存儲的數(shù)據(jù)以及創(chuàng)建新行供插入。
  • 數(shù)據(jù)訪問對象 (DAO) 提供應(yīng)用在數(shù)據(jù)庫中檢索、更新、插入和刪除數(shù)據(jù)所用的方法。
  • 數(shù)據(jù)庫類持有數(shù)據(jù)庫,并且是應(yīng)用數(shù)據(jù)庫底層連接的主要訪問點。數(shù)據(jù)庫類為應(yīng)用提供與該數(shù)據(jù)庫關(guān)聯(lián)的 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數(shù)據(jù)庫,它應(yīng)如何呈現(xiàn)數(shù)據(jù)庫中的信息并與之交互。

image-20240917201608505

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

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

@Entity()
public class Word{

}

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

@Entity(tableName = "yourTableName")

接下來,我們應(yīng)該添加:

  • 數(shù)據(jù)庫的元素
  • 主鍵:每一個實體至少定義一個字段作為主鍵。可以將@PrimaryKey的autoGenerate屬性設(shè)置為true來設(shè)置自動id。如果實體有一個復(fù)合的主鍵,可以使用 @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 數(shù)據(jù)訪問對象—Dao

新建一個MyDao對象的接口作為數(shù)據(jù)庫操作的接口,在這個接口中,我們定義數(shù)據(jù)庫的增刪改查操作,在此之前,我們需要用 @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)建數(shù)據(jù)庫實例—Database

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

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

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

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

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

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

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

使用Room數(shù)據(jù)庫

獲取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

結(jié)語

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

相關(guān)文章

  • Android拆輪子系列之寫驗證碼控件的方法

    Android拆輪子系列之寫驗證碼控件的方法

    這篇文章主要介紹了Android拆輪子系列之寫驗證碼控件的方法的, 涉及到Canvas和pint的使用和View的基本用法等相關(guān)知識點,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2016-10-10
  • Android 超簡易Zxing框架 生成二維碼+掃碼功能

    Android 超簡易Zxing框架 生成二維碼+掃碼功能

    這篇文章主要介紹了Android 超簡易Zxing框架 生成二維碼+掃碼功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Android 使用騰訊X5瀏覽器上傳圖片的示例

    Android 使用騰訊X5瀏覽器上傳圖片的示例

    這篇文章主要介紹了Android 使用騰訊X5瀏覽器上傳圖片的示例,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • android調(diào)用WebService實例分析

    android調(diào)用WebService實例分析

    這篇文章主要介紹了android調(diào)用WebService的方法,以實例形式較為詳細的分析了WebService的調(diào)用原理與具體使用方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android實現(xiàn)把文件存放在SDCard的方法

    Android實現(xiàn)把文件存放在SDCard的方法

    這篇文章主要介紹了Android實現(xiàn)把文件存放在SDCard的方法,涉及Android針對SDCard的讀寫技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Android實現(xiàn)懸浮可拖拽的Button

    Android實現(xiàn)懸浮可拖拽的Button

    這篇文章主要為大家詳細介紹了Android實現(xiàn)懸浮可拖拽的Button,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Flutter自定義實現(xiàn)彈出層的示例代碼

    Flutter自定義實現(xiàn)彈出層的示例代碼

    這篇文章主要為大家詳細介紹了Flutter如何自定義組件實現(xiàn)彈出層的效果,?文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • Android中SharedPreferences簡單使用實例

    Android中SharedPreferences簡單使用實例

    這篇文章主要介紹了Android中SharedPreferences簡單使用案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android組件實現(xiàn)列表選擇框功能

    Android組件實現(xiàn)列表選擇框功能

    android提供的列表選擇框(Spinner)相當于web端用戶注冊時的選擇下拉框,比如注冊候選擇省份城市等。這篇文章主要介紹了Android組件實現(xiàn)列表選擇框功能,需要的朋友可以參考下
    2017-02-02
  • Android編程實現(xiàn)獲取所有傳感器數(shù)據(jù)的方法

    Android編程實現(xiàn)獲取所有傳感器數(shù)據(jù)的方法

    這篇文章主要介紹了Android編程實現(xiàn)獲取所有傳感器數(shù)據(jù)的方法,涉及Android針對傳感器Sensor相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06

最新評論

宾阳县| 柯坪县| 丹寨县| 龙南县| 昌图县| 阳山县| 武山县| 弥渡县| 娱乐| 义乌市| 荆门市| 嘉禾县| 涟源市| 英德市| 上高县| 万载县| 宜阳县| 临武县| 江山市| 保亭| 韩城市| 托克托县| 绵阳市| 天峻县| 荔波县| 财经| 平潭县| 加查县| 洛南县| 龙南县| 皋兰县| 泰宁县| 同德县| 株洲市| 屏东县| 赣州市| 华池县| 台安县| 岳阳市| 嘉义县| 郴州市|