国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HarmonyOS學(xué)習(xí)路之開發(fā)篇—數(shù)據(jù)管理(對(duì)象關(guān)系映射數(shù)據(jù)庫(kù))

這篇具有很好參考價(jià)值的文章主要介紹了HarmonyOS學(xué)習(xí)路之開發(fā)篇—數(shù)據(jù)管理(對(duì)象關(guān)系映射數(shù)據(jù)庫(kù))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

HarmonyOS對(duì)象關(guān)系映射(Object Relational Mapping,ORM)數(shù)據(jù)庫(kù)是一款基于SQLite的數(shù)據(jù)庫(kù)框架,屏蔽了底層SQLite數(shù)據(jù)庫(kù)的SQL操作,針對(duì)實(shí)體和關(guān)系提供了增刪改查等一系列的面向?qū)ο蠼涌?。?yīng)用開發(fā)者不必再去編寫復(fù)雜的SQL語句, 以操作對(duì)象的形式來操作數(shù)據(jù)庫(kù),提升效率的同時(shí)也能聚焦于業(yè)務(wù)開發(fā)。

基本概念

  • 對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)的三個(gè)主要組件
    • 數(shù)據(jù)庫(kù):被開發(fā)者用@Database注解,且繼承了OrmDatabase的類,對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)。
    • 實(shí)體對(duì)象:被開發(fā)者用@Entity注解,且繼承了OrmObject的類,對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)中的表。
    • 對(duì)象數(shù)據(jù)操作接口:包括數(shù)據(jù)庫(kù)操作的入口OrmContext類和謂詞接口(OrmPredicate)等。
  • 謂詞

    數(shù)據(jù)庫(kù)中用來代表數(shù)據(jù)實(shí)體的性質(zhì)、特征或者數(shù)據(jù)實(shí)體之間關(guān)系的詞項(xiàng),主要用來定義數(shù)據(jù)庫(kù)的操作條件。對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)將SQLite數(shù)據(jù)庫(kù)中的謂詞封裝成了接口方法供開發(fā)者調(diào)用。開發(fā)者通過對(duì)象數(shù)據(jù)操作接口,可以訪問到應(yīng)用持久化的關(guān)系型數(shù)據(jù)。

  • 對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)

    通過將實(shí)例對(duì)象映射到關(guān)系上,實(shí)現(xiàn)操作實(shí)例對(duì)象的語法,來操作關(guān)系型數(shù)據(jù)庫(kù)。它是在SQLite數(shù)據(jù)庫(kù)的基礎(chǔ)上提供的一個(gè)抽象層。

  • SQLite數(shù)據(jù)庫(kù)

    一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。

運(yùn)作機(jī)制

對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)操作是基于關(guān)系型數(shù)據(jù)庫(kù)操作接口完成的,實(shí)際是在關(guān)系型數(shù)據(jù)庫(kù)操作的基礎(chǔ)上又實(shí)現(xiàn)了對(duì)象關(guān)系映射等特性。因此對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)跟關(guān)系型數(shù)據(jù)庫(kù)一樣,都使用SQLite作為持久化引擎,底層使用的是同一套數(shù)據(jù)庫(kù)連接池和數(shù)據(jù)庫(kù)連接機(jī)制。

使用對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)的開發(fā)者需要先配置實(shí)體模型與關(guān)系映射文件。應(yīng)用數(shù)據(jù)管理框架提供的類生成工具會(huì)解析這些文件,生成數(shù)據(jù)庫(kù)幫助類,這樣應(yīng)用數(shù)據(jù)管理框架就能在運(yùn)行時(shí),根據(jù)開發(fā)者的配置創(chuàng)建好數(shù)據(jù)庫(kù),并在存儲(chǔ)過程中自動(dòng)完成對(duì)象關(guān)系映射。開發(fā)者再通過對(duì)象數(shù)據(jù)操作接口,如OrmContext接口和謂詞接口等操作持久化數(shù)據(jù)庫(kù)。

對(duì)象數(shù)據(jù)操作接口提供一組基于對(duì)象映射的數(shù)據(jù)操作接口,實(shí)現(xiàn)了基于SQL的關(guān)系模型數(shù)據(jù)到對(duì)象的映射,讓用戶不需要再和復(fù)雜的 SQL語句打交道,只需簡(jiǎn)單地操作實(shí)體對(duì)象的屬性和方法。對(duì)象數(shù)據(jù)操作接口支持對(duì)象的增刪改查操作,同時(shí)支持事務(wù)操作等。

圖1?對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)運(yùn)作機(jī)制

HarmonyOS學(xué)習(xí)路之開發(fā)篇—數(shù)據(jù)管理(對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)),HarmonyOS 學(xué)習(xí),數(shù)據(jù)庫(kù),學(xué)習(xí),oracle,harmonyos,java,映射數(shù)據(jù)庫(kù)

?

默認(rèn)配置

  • 如果不指定數(shù)據(jù)庫(kù)的日志模式,那么系統(tǒng)默認(rèn)日志方式是WAL(Write Ahead Log)模式。
  • 如果不指定數(shù)據(jù)庫(kù)的落盤模式,那么系統(tǒng)默認(rèn)落盤方式是FULL模式。
  • HarmonyOS數(shù)據(jù)庫(kù)使用的共享內(nèi)存默認(rèn)大小是2MB。

約束與限制

  • 當(dāng)應(yīng)用使用對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)接口時(shí),應(yīng)用包和類的命名需要遵循典型的Java風(fēng)格(小寫包名,大駝峰類名)。
  • HarmonyOS對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)是建立在HarmonyOS關(guān)系型數(shù)據(jù)庫(kù)的基礎(chǔ)之上。
  • 此外當(dāng)開發(fā)者建立實(shí)體對(duì)象類時(shí),對(duì)象屬性的類型可以在下表的類型中選擇。不支持使用自定義類型。
表1?實(shí)體對(duì)象屬性支持的類型

類型名稱

描述

初始值

Integer

封裝整型

null

int

整型

0

Long

封裝長(zhǎng)整型

null

long

長(zhǎng)整型

0L

Double

封裝雙精度浮點(diǎn)型

null

double

雙精度浮點(diǎn)型

0

Float

封裝單精度浮點(diǎn)型

null

float

單精度浮點(diǎn)型

0

Short

封裝短整型

null

short

短整型

0

String

字符串型

null

Boolean

封裝布爾型

null

boolean

布爾型

0

Byte

封裝字節(jié)型

null

byte

字節(jié)型

0

Character

封裝字符型

null

char

字符型

' '

Date

日期類

null

Time

時(shí)間類

null

Timestamp

時(shí)間戳類

null

Calendar

日歷類

null

Blob

二進(jìn)制大對(duì)象

null

Clob

字符大對(duì)象

null

對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)開發(fā)

場(chǎng)景介紹

對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)適用于開發(fā)者使用的數(shù)據(jù)可以分解為一個(gè)或多個(gè)對(duì)象,且需要對(duì)數(shù)據(jù)進(jìn)行增刪改查等操作,但是不希望編寫過于復(fù)雜的SQL語句的場(chǎng)景。

該對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)的實(shí)現(xiàn)是基于關(guān)系型數(shù)據(jù)庫(kù),除了數(shù)據(jù)庫(kù)版本升降級(jí)等場(chǎng)景外,操作對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)一般不需要編寫SQL語句,但是仍然要求使用者對(duì)于關(guān)系型數(shù)據(jù)庫(kù)的基本概念有一定的了解。

開發(fā)能力介紹

對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)目前可以支持?jǐn)?shù)據(jù)庫(kù)和表的創(chuàng)建,對(duì)象數(shù)據(jù)的增刪改查、對(duì)象數(shù)據(jù)變化回調(diào)、數(shù)據(jù)庫(kù)升降級(jí)和備份等功能。

說明

對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)提供的接口在ohos.data.orm包中,使用該包中的接口時(shí),要求配置文件config.json的“app?>?bundleName”字段的值,不能包含大寫字母。

數(shù)據(jù)庫(kù)和表的創(chuàng)建

  1. 創(chuàng)建數(shù)據(jù)庫(kù)。開發(fā)者需要定義一個(gè)表示數(shù)據(jù)庫(kù)的類,繼承OrmDatabase,再通過@Database注解內(nèi)的entities屬性指定哪些數(shù)據(jù)模型類屬于這個(gè)數(shù)據(jù)庫(kù)。

    屬性:

    • version:數(shù)據(jù)庫(kù)版本號(hào)。
    • entities:數(shù)據(jù)庫(kù)內(nèi)包含的表。
  2. 創(chuàng)建數(shù)據(jù)表。開發(fā)者可通過創(chuàng)建一個(gè)繼承了OrmObject并用@Entity注解的類,獲取數(shù)據(jù)庫(kù)實(shí)體對(duì)象,也就是表的對(duì)象。

    屬性:

    • tableName:表名。
    • primaryKeys:主鍵名,一個(gè)表里只能有一個(gè)主鍵,一個(gè)主鍵可以由多個(gè)字段組成。
    • foreignKeys:外鍵列表。
    • indices:索引列表。
    表1?注解對(duì)照表

    接口名稱

    描述

    @Database

    被@Database注解且繼承了OrmDatabase的類對(duì)應(yīng)數(shù)據(jù)庫(kù)類。

    @Entity

    被@Entity注解且繼承了OrmObject的類對(duì)應(yīng)數(shù)據(jù)表類。

    @Column

    被@Column注解的變量對(duì)應(yīng)數(shù)據(jù)表的字段。

    @PrimaryKey

    被@PrimaryKey注解的變量對(duì)應(yīng)數(shù)據(jù)表的主鍵。

    @ForeignKey

    被@ForeignKey注解的變量對(duì)應(yīng)數(shù)據(jù)表的外鍵。

    @Index

    被@Index注解的內(nèi)容對(duì)應(yīng)數(shù)據(jù)表索引的屬性。

打開數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)加密

  1. 打開數(shù)據(jù)庫(kù)。開發(fā)者通過getOrmContext打開數(shù)據(jù)庫(kù)。
    表2?打開數(shù)據(jù)庫(kù)API

    類名

    接口名

    描述

    DatabaseHelper

    DatabaseHelper(Context context)

    DatabaseHelper是數(shù)據(jù)庫(kù)操作的輔助類,當(dāng)數(shù)據(jù)庫(kù)創(chuàng)建成功后,數(shù)據(jù)庫(kù)文件將存儲(chǔ)在由上下文指定的目錄里。

    • 獲取上下文參考方法:context入?yún)㈩愋蜑閛hos.app.Context,注意不要使用slice.getContext()來獲取context,請(qǐng)直接傳入slice,否則會(huì)出現(xiàn)找不到類的報(bào)錯(cuò)。
    • 查看詳細(xì)路徑信息:ohos.app.Context#getDatabaseDir()。

    DatabaseHelper

    public <T extends OrmDatabase> OrmContext getOrmContext(String alias, String name, Class<T> ormDatabase, OrmMigration... migrations)

    打開數(shù)據(jù)庫(kù),alias數(shù)據(jù)庫(kù)別名,name數(shù)據(jù)庫(kù)名稱,ormDatabase數(shù)據(jù)庫(kù)對(duì)應(yīng)類,migrations數(shù)據(jù)庫(kù)升級(jí)類。

    DatabaseHelper

    public <T extends OrmDatabase> OrmContext getOrmContext(OrmConfig ormConfig, Class<T> ormDatabase, OrmMigration... migrations)

    打開數(shù)據(jù)庫(kù),ormConfig數(shù)據(jù)庫(kù)配置,ormDatabase數(shù)據(jù)庫(kù)對(duì)應(yīng)類,migrations數(shù)據(jù)庫(kù)升級(jí)類。

    DatabaseHelper

    public OrmContext getOrmContext(String alias)

    根據(jù)別名打開數(shù)據(jù)庫(kù)。

  2. 數(shù)據(jù)庫(kù)加密。對(duì)象關(guān)系映射數(shù)據(jù)庫(kù)提供數(shù)據(jù)庫(kù)加密的能力,創(chuàng)建加密數(shù)據(jù)庫(kù)時(shí)傳入指定密鑰,后續(xù)打開加密數(shù)據(jù)庫(kù)時(shí),需要傳入正確密鑰。
    表3?數(shù)據(jù)庫(kù)傳入密鑰API

    類名

    接口名

    描述

    OrmConfig.Builder

    public OrmConfig.Builder setEncryptKey(byte[] encryptKey)

    為數(shù)據(jù)庫(kù)配置類設(shè)置數(shù)據(jù)庫(kù)加密密鑰,創(chuàng)建或打開數(shù)據(jù)庫(kù)時(shí)傳入包含數(shù)據(jù)庫(kù)加密密鑰的配置類,即可創(chuàng)建或打開加密數(shù)據(jù)庫(kù)。

對(duì)象數(shù)據(jù)的增刪改查

通過對(duì)象數(shù)據(jù)操作接口,開發(fā)者可以對(duì)對(duì)象數(shù)據(jù)進(jìn)行增刪改查操作。

表4?對(duì)象數(shù)據(jù)操作API

類名

接口名

描述

OrmContext

<T extends OrmObject> boolean insert(T object)

添加方法。

OrmContext

<T extends OrmObject> boolean update(T object)

更新方法。

OrmContext

<T extends OrmObject> List<T> query(OrmPredicates predicates)

查詢方法。

OrmContext

<T extends OrmObject> boolean delete(T object)

刪除方法。

OrmContext

<T extends OrmObject> OrmPredicates where(Class<T> clz)

設(shè)置謂詞方法。

事務(wù)提交和回滾

對(duì)象關(guān)系型數(shù)據(jù)庫(kù)提供事務(wù)機(jī)制,來保證用戶操作的原子性。對(duì)單條數(shù)據(jù)進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),無需開啟事務(wù);插入大量數(shù)據(jù)時(shí),開啟事務(wù)可以保證數(shù)據(jù)的準(zhǔn)確性。如果中途操作出現(xiàn)失敗,會(huì)自動(dòng)執(zhí)行回滾操作。

表5?事務(wù)處理API

類名

接口名

描述

OrmContext

void beginTransaction()

開啟事務(wù)。

OrmContext

void commit()

事務(wù)提交。

OrmContext

void rollback()

事務(wù)回滾。

OrmContext

boolean isInTransaction()

是否正在執(zhí)行事務(wù)操作。

數(shù)據(jù)變化觀察者設(shè)置

通過使用對(duì)象數(shù)據(jù)操作接口,開發(fā)者可以在某些數(shù)據(jù)上設(shè)置觀察者,接收數(shù)據(jù)變化的通知。

表6?數(shù)據(jù)變化觀察者API

類名

接口名

描述

OrmContext

void registerStoreObserver(String alias, OrmObjectObserver observer)

注冊(cè)數(shù)據(jù)庫(kù)變化回調(diào)。

OrmContext

void registerContextObserver(OrmContext watchedContext, OrmObjectObserver observer)

注冊(cè)上下文變化回調(diào)。

OrmContext

void registerEntityObserver(String entityName, OrmObjectObserver observer)

注冊(cè)數(shù)據(jù)庫(kù)實(shí)體變化回調(diào)。

OrmContext

void registerObjectObserver(OrmObject ormObject, OrmObjectObserver observer)

注冊(cè)對(duì)象變化回調(diào)。

數(shù)據(jù)庫(kù)的升降級(jí)

通過調(diào)用數(shù)據(jù)庫(kù)升降級(jí)接口,開發(fā)者可以將數(shù)據(jù)庫(kù)切換到不同的版本。

表7?數(shù)據(jù)庫(kù)升降級(jí)API

類名

接口名

描述

OrmMigration

public OrmMigration(int beginVersion, int endVersion)

數(shù)據(jù)庫(kù)升降級(jí)開始版本和結(jié)束版本。

OrmMigration

public abstract void onMigrate( RdbStore store)

數(shù)據(jù)庫(kù)版本升降級(jí)方法。

OrmMigration

public int getBeginVersion()

獲取開始版本。

OrmMigration

public int getEndVersion()

獲取結(jié)束版本。

數(shù)據(jù)庫(kù)的備份恢復(fù)

開發(fā)者可以將當(dāng)前數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行備份,在必要的時(shí)候進(jìn)行數(shù)據(jù)恢復(fù)。

表8?數(shù)據(jù)庫(kù)備份與恢復(fù)API

類名

接口名稱

描述

OrmContext

boolean backup(String destPath)

數(shù)據(jù)庫(kù)備份方法。

OrmContext

boolean restore(String srcPath)

數(shù)據(jù)庫(kù)恢復(fù)備份方法。

開發(fā)步驟

配置“build.gradle”文件。

  • 如果使用注解處理器的模塊為“com.huawei.ohos.hap”模塊,則需要在模塊的“build.gradle”文件的ohos節(jié)點(diǎn)中添加以下配置:
compileOptions{        
    annotationEnabled true    
} 
  • 如果使用注解處理器的模塊為“com.huawei.ohos.library”模塊,則需要在模塊的“build.gradle”文件的“dependencies”節(jié)點(diǎn)中配置注解處理器。
  • 查看“orm_annotations_java.jar”、“orm_annotations_processor_java.jar” 、“javapoet_java.jar”這3個(gè)jar包在HUAWEI SDK中的Sdk/java/x.x.x.xx/build-tools/lib/目錄,并將目錄的這三個(gè)jar包導(dǎo)進(jìn)來。
dependencies {
    compile files("orm_annotations_java.jar的路徑", "orm_annotations_processor_java.jar的路徑", "javapoet_java.jar的路徑")
    annotationProcessor files("orm_annotations_java.jar的路徑", "orm_annotations_processor_java.jar的路徑", "javapoet_java.jar的路徑")
}
  • 如果使用注解處理器的模塊為“java-library”模塊,則需要在模塊的“build.gradle”文件的dependencies節(jié)點(diǎn)中配置注解處理器,并導(dǎo)入“ohos.jar”。
dependencies {
    compile files("ohos.jar的路徑","orm_annotations_java.jar的路徑","orm_annotations_processor_java.jar的路徑","javapoet_java.jar的路徑")     
    annotationProcessor files("orm_annotations_java.jar的路徑","orm_annotations_processor_java.jar的路徑","javapoet_java.jar的路徑")
}

構(gòu)造數(shù)據(jù)庫(kù),即創(chuàng)建數(shù)據(jù)庫(kù)類并配置對(duì)應(yīng)的屬性。

例如,定義了一個(gè)數(shù)據(jù)庫(kù)類BookStore.java,數(shù)據(jù)庫(kù)包含了“User”,"Book","AllDataType"三個(gè)表,版本號(hào)為“1”。數(shù)據(jù)庫(kù)類的getVersion方法和getHelper方法不需要實(shí)現(xiàn),直接將數(shù)據(jù)庫(kù)類設(shè)為虛類即可。

@Database(entities = {User.class, Book.class, AllDataType.class}, version = 1) 
public abstract class BookStore extends OrmDatabase { 
}

構(gòu)造數(shù)據(jù)表,即創(chuàng)建數(shù)據(jù)庫(kù)實(shí)體類并配置對(duì)應(yīng)的屬性(如對(duì)應(yīng)表的主鍵,外鍵等)。數(shù)據(jù)表必須與其所在的數(shù)據(jù)庫(kù)在同一個(gè)模塊中。

例如,定義了一個(gè)實(shí)體類User.java,對(duì)應(yīng)數(shù)據(jù)庫(kù)內(nèi)的表名為“user”;indices 為“firstName”和“l(fā)astName”兩個(gè)字段建立了復(fù)合索引“name_index”,并且索引值是唯一的;“ignoredColumns”表示該字段不需要添加到“user”表的屬性中。

@Entity(tableName = "user", ignoredColumns = {"ignoredColumn1", "ignoredColumn2"},
    indices = {@Index(value = {"firstName", "lastName"}, name = "name_index", unique = true)}) 
public class User extends OrmObject { 
    // 此處將userId設(shè)為了自增的主鍵。注意只有在數(shù)據(jù)類型為包裝類型時(shí),自增主鍵才能生效。
    @PrimaryKey(autoGenerate = true) 
    private Integer userId;   
    private String firstName;   
    private String lastName;   
    private int age;   
    private double balance;   
    private int ignoredColumn1; 
    private int ignoredColumn2; 
 
    // 需添加各字段的getter和setter方法。 
}

說明

示例中的getter & setter 的方法名為小駝峰格式,除了手寫方法,IDE中包含自動(dòng)生成getter和setter方法的Generate插件。

  • 當(dāng)變量名的格式類似“firstName”時(shí),getter和setter方法名應(yīng)為“getFirstName”和“setFirstName”。
  • 當(dāng)變量名的格式類似“mAge”,即第一個(gè)字母小寫,第二個(gè)字母大寫的格式時(shí),getter和setter方法名應(yīng)為“getmAge”和“setmAge”。
  • 當(dāng)變量名格式類似“x”,即只有一個(gè)字母時(shí),getter和setter方法名應(yīng)為“getX”和“setX”。

變量為boolean類型時(shí),上述規(guī)則仍然成立,即“isFirstName”,“ismAge”,“isX”。

使用對(duì)象數(shù)據(jù)操作接口OrmContext創(chuàng)建數(shù)據(jù)庫(kù)。

例如,通過對(duì)象數(shù)據(jù)操作接口OrmContext,創(chuàng)建一個(gè)別名為“BookStore”,數(shù)據(jù)庫(kù)文件名為“BookStore.db”的數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)已經(jīng)存在,執(zhí)行以下代碼不會(huì)重復(fù)創(chuàng)建。通過context.getDatabaseDir()可以獲取創(chuàng)建的數(shù)據(jù)庫(kù)文件所在的目錄。

// context入?yún)㈩愋蜑閛hos.app.Context,注意不要使用slice.getContext()來獲取context,請(qǐng)直接傳入slice,否則會(huì)出現(xiàn)找不到類的報(bào)錯(cuò)。
DatabaseHelper helper = new DatabaseHelper(this); 

OrmContext context = helper.getOrmContext("BookStore", "BookStore.db", BookStore.class); 

(可選)數(shù)據(jù)庫(kù)升降級(jí)。如果開發(fā)者有多個(gè)版本的數(shù)據(jù)庫(kù),通過設(shè)置數(shù)據(jù)庫(kù)版本遷移類可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)版本升降級(jí)。

數(shù)據(jù)庫(kù)版本升降級(jí)的調(diào)用示例如下。其中BookStoreUpgrade類也是一個(gè)繼承了OrmDatabase的數(shù)據(jù)庫(kù)類,與BookStore類的區(qū)別在于配置的版本號(hào)不同。

OrmContext context = helper.getOrmContext("BookStore", 
                                          "BookStore.db", 
                                          BookStoreUpgrade.class, 
                                          new TestOrmMigration32(), 
                                          new TestOrmMigration23(), 
                                          new TestOrmMigration12(), 
                                          new TestOrmMigration21());

TestOrmMigration12的實(shí)現(xiàn)示例如下:

private static class TestOrmMigration12 extends OrmMigration {
    // 此處用于配置數(shù)據(jù)庫(kù)版本遷移的開始版本和結(jié)束版本,super(startVersion, endVersion)即數(shù)據(jù)庫(kù)版本號(hào)從1升到2。
    public TestOrmMigration12() {super(1, 2); }
    @Override    
    public void onMigrate(RdbStore store) {        
        store.executeSql("ALTER TABLE `Book` ADD COLUMN `addColumn12` INTEGER");   
    }
}

說明

數(shù)據(jù)庫(kù)版本遷移類的開始版本和結(jié)束版本必須是連續(xù)的。

  • 如果BookStore.db的版本號(hào)為“1”,BookStoreUpgrade.class的版本號(hào)為“2”時(shí),TestOrmMigration12類的onMigrate方法會(huì)被自動(dòng)回調(diào)。
  • 如果BookStore.db的版本號(hào)為“1”,BookStoreUpgrade.class版本號(hào)為“3”時(shí),TestOrmMigration12類和TestOrmMigration23類的onMigrate方法會(huì)依次被回調(diào)。

使用對(duì)象數(shù)據(jù)操作接口OrmContext對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查、注冊(cè)觀察者、備份數(shù)據(jù)庫(kù)等。

  • 更新或刪除數(shù)據(jù),分為兩種情況:
    • 通過直接傳入OrmObject對(duì)象的接口來更新數(shù)據(jù),需要先從表中查到需要更新的User對(duì)象列表,然后修改對(duì)象的值,再調(diào)用更新接口持久化到數(shù)據(jù)庫(kù)中。刪除數(shù)據(jù)與更新數(shù)據(jù)的方法類似,只是不需要更新對(duì)象的值。

      例如,更新“user”表中age為“29”的行,需要先查找“user”表中對(duì)應(yīng)數(shù)據(jù),得到一個(gè)User的列表。然后選擇列表中需要更新的User對(duì)象(如第0個(gè)對(duì)象),設(shè)置需要更新的值,并調(diào)用update接口傳入被更新的User對(duì)象。最后調(diào)用flush接口持久化到數(shù)據(jù)庫(kù)中。

// 更新數(shù)據(jù)
OrmPredicates predicates = context.where(User.class);
predicates.equalTo("age", 29);
List<User> users = context.query(predicates);
User user = users.get(0);
user.setFirstName("Li");
context.update(user);
context.flush();

// 刪除數(shù)據(jù)
OrmPredicates predicates = context.where(User.class);
predicates.equalTo("age", 29);
List<User> users = context.query(predicates);
User user = users.get(0);
context.delete(user);
context.flush();
  • 通過傳入謂詞的接口來更新和刪除數(shù)據(jù),方法與OrmObject對(duì)象的接口類似,只是無需flush就可以持久化到數(shù)據(jù)庫(kù)中。
ValuesBucket valuesBucket = new ValuesBucket();
valuesBucket.putInteger("age", 31);
valuesBucket.putString("firstName", "ZhangU");
valuesBucket.putString("lastName", "SanU");
valuesBucket.putDouble("balance", 300.51);
OrmPredicates update = context.where(User.class).equalTo("userId", 1);
context.update(update, valuesBucket);
  • 查詢數(shù)據(jù)。在數(shù)據(jù)庫(kù)的“user”表中查詢lastName為“San”的User對(duì)象列表,示例如下:
OrmPredicates query = context.where(User.class).equalTo("lastName", "San"); 
List<User> users = context.query(query);
  • 注冊(cè)觀察者。
// 定義一個(gè)觀察者類。
private class CustomedOrmObjectObserver implements OrmObjectObserver {
    @Override    
    public void onChange(OrmContext changeContext, AllChangeToTarget subAllChange) {
        // 用戶可以在此處定義觀察者行為
    }
}

// 調(diào)用registerEntityObserver方法注冊(cè)一個(gè)觀察者observer。
CustomedOrmObjectObserver observer = new CustomedOrmObjectObserver();
context.registerEntityObserver("user", observer);

// 當(dāng)以下方法被調(diào)用,并flush成功時(shí),觀察者observer的onChange方法會(huì)被觸發(fā)。其中,方法的入?yún)⒈仨殲閁ser類的對(duì)象。
public <T extends OrmObject> boolean insert(T object)
public <T extends OrmObject> boolean update(T object)
public <T extends OrmObject> boolean delete(T object)
  • 備份數(shù)據(jù)庫(kù)。其中原數(shù)據(jù)庫(kù)名為“OrmTest.db”,備份數(shù)據(jù)庫(kù)名為“OrmBackup.db”。
OrmContext context = helper.getObjectContext("OrmTest", "OrmTest.db", BookStore.class);
context.backup("OrmBackup.db");
context.close();

刪除數(shù)據(jù)庫(kù),例如刪除OrmTest.db。文章來源地址http://www.zghlxwxcb.cn/news/detail-537871.html

helper.deleteRdbStore("OrmTest.db");

到了這里,關(guān)于HarmonyOS學(xué)習(xí)路之開發(fā)篇—數(shù)據(jù)管理(對(duì)象關(guān)系映射數(shù)據(jù)庫(kù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HarmonyOS學(xué)習(xí)路之方舟開發(fā)框架—學(xué)習(xí)ArkTS語言(狀態(tài)管理 六)

    HarmonyOS學(xué)習(xí)路之方舟開發(fā)框架—學(xué)習(xí)ArkTS語言(狀態(tài)管理 六)

    AppStorage是應(yīng)用全局的UI狀態(tài)存儲(chǔ),是和應(yīng)用的進(jìn)程綁定的,由UI框架在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建,為應(yīng)用程序UI狀態(tài)屬性提供中央存儲(chǔ)。 和LocalStorage不同的是,LocalStorage是頁(yè)面級(jí)的,通常應(yīng)用于頁(yè)面內(nèi)的數(shù)據(jù)共享。而對(duì)于AppStorage,是應(yīng)用級(jí)的全局狀態(tài)共享。 AppStorage是在應(yīng)用啟動(dòng)

    2024年02月20日
    瀏覽(26)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—設(shè)備管理(設(shè)備標(biāo)識(shí)符)

    定義 網(wǎng)絡(luò)設(shè)備節(jié)點(diǎn)通信標(biāo)識(shí)符,是分布式軟總線提供的一種非永久性標(biāo)識(shí)符。NetworkID基于Java原生的UUID接口隨機(jī)生成,長(zhǎng)度為32字節(jié),使用十六進(jìn)制表示。主要用于業(yè)務(wù)調(diào)用分布式能力時(shí),標(biāo)識(shí)分布式網(wǎng)絡(luò)內(nèi)的設(shè)備節(jié)點(diǎn)。 NetworkID 舉例: 6B97BC8F6F85A2A1A6E0E262111F42D6A8541CBFF6CAF688F

    2024年02月13日
    瀏覽(69)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—設(shè)備管理(控制類小器件)

    HarmonyOS學(xué)習(xí)路之開發(fā)篇—設(shè)備管理(控制類小器件)

    控制類小器件指的是設(shè)備上的LED燈和振動(dòng)器。其中,LED燈主要用作指示(如充電狀態(tài))、閃爍功能(如三色燈)等;振動(dòng)器主要用于鬧鐘、開關(guān)機(jī)振動(dòng)、來電振動(dòng)等場(chǎng)景。 控制類小器件主要包含以下四個(gè)模塊:控制類小器件API、控制類小器件Framework、控制類小器件Service、H

    2024年02月12日
    瀏覽(14)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—流轉(zhuǎn)

    HarmonyOS學(xué)習(xí)路之開發(fā)篇—流轉(zhuǎn)

    隨著全場(chǎng)景多設(shè)備生活方式的不斷深入,用戶擁有的設(shè)備越來越多,每個(gè)設(shè)備都能在適合的場(chǎng)景下提供良好的體驗(yàn),例如:手表可以提供及時(shí)的信息查看能力,電視可以帶來沉浸的觀影體驗(yàn)。但是,每個(gè)設(shè)備也有使用場(chǎng)景的局限,例如:在電視上輸入文本相對(duì)手機(jī)來說是非常

    2024年02月15日
    瀏覽(95)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(分詞)

    隨著信息技術(shù)的發(fā)展,網(wǎng)絡(luò)中的信息量成幾何級(jí)增長(zhǎng)逐步成為當(dāng)今社會(huì)的主要特征。準(zhǔn)確提取文本關(guān)鍵信息,是搜索引擎等領(lǐng)域的技術(shù)基礎(chǔ),而分詞作為文本信息提取的第一步則尤為重要。 分詞作為自然語言處理領(lǐng)域的基礎(chǔ)研究,衍生出各類不同的文本處理相關(guān)應(yīng)用。 分詞

    2024年02月11日
    瀏覽(94)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(實(shí)體識(shí)別)

    實(shí)體識(shí)別能夠從自然語言中提取出具有特定意義的實(shí)體,并在此基礎(chǔ)上完成搜索等一系列相關(guān)操作及功能。 實(shí)體識(shí)別覆蓋范圍大,能夠滿足日常開發(fā)中對(duì)實(shí)體識(shí)別的需求,讓應(yīng)用體驗(yàn)更好。識(shí)別準(zhǔn)確率高,能夠準(zhǔn)確地提取到實(shí)體信息,對(duì)應(yīng)用基于信息的后續(xù)服務(wù)形成關(guān)鍵影響

    2024年02月11日
    瀏覽(501)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(語音播報(bào))

    語音播報(bào)(Text to Speech,下文簡(jiǎn)稱TTS),基于華為智慧引擎(HUAWEI HiAI Engine)中的語音播報(bào)引擎,向開發(fā)者提供人工智能應(yīng)用層API。該技術(shù)提供將文本轉(zhuǎn)換為語音并進(jìn)行播報(bào)的能力。 支持超長(zhǎng)文本播報(bào),最大文本長(zhǎng)度為100000個(gè)字符。 語音播報(bào)不支持多線程調(diào)用。 實(shí)時(shí)語音交

    2024年02月11日
    瀏覽(90)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(相機(jī)開發(fā) 一)

    HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(相機(jī)開發(fā) 一)

    HarmonyOS相機(jī)模塊支持相機(jī)業(yè)務(wù)的開發(fā),開發(fā)者可以通過已開放的接口實(shí)現(xiàn)相機(jī)硬件的訪問、操作和新功能開發(fā),最常見的操作如:預(yù)覽、拍照、連拍和錄像等。 相機(jī)靜態(tài)能力 用于描述相機(jī)的固有能力的一系列參數(shù),比如朝向、支持的分辨率等信息。 物理相機(jī) 物理相機(jī)就是獨(dú)

    2024年02月10日
    瀏覽(91)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(相機(jī)開發(fā) 二)

    Camera操作類,包括相機(jī)預(yù)覽、錄像、拍照等功能接口。 接口名 描述 triggerSingleCapture?(FrameConfig frameConfig) 啟動(dòng)相機(jī)幀的單幀捕獲。 triggerMultiCapture?(ListFrameConfig frameConfigs) 啟動(dòng)相機(jī)幀的多幀捕獲。 configure?(CameraConfig config) 配置相機(jī)。 flushCaptures?() 停止并清除相機(jī)幀的捕獲

    2024年02月11日
    瀏覽(91)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(圖像開發(fā) 二)

    圖像編碼就是將PixelMap圖像編碼成不同存檔格式圖片,用于后續(xù)其他處理,比如保存、傳輸?shù)?。?dāng)前僅支持JPEG格式。 ImagePacker主要用于圖像編碼。 接口名 描述 create() 創(chuàng)建圖像打包器實(shí)例。 initializePacking(byte[] data, PackingOptions opts) 初始化打包任務(wù),將字節(jié)數(shù)組設(shè)置為打包后輸

    2024年02月11日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包