0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于SQLite的鴻蒙的關(guān)系型數(shù)據(jù)庫使用

鴻蒙系統(tǒng)HarmonyOS ? 來源:linhy0614 ? 作者:linhy0614 ? 2021-01-20 11:48 ? 次閱讀

這篇我們就來介紹下鴻蒙系統(tǒng)的數(shù)據(jù)庫如何使用 鴻蒙的關(guān)系型數(shù)據(jù)庫是基于SQLite的實(shí)現(xiàn),官方提供了關(guān)系型數(shù)據(jù)庫實(shí)現(xiàn)和基于對象的關(guān)系型數(shù)據(jù)庫兩種數(shù)據(jù)庫操作,本文會指導(dǎo)大家如何分別使用這兩種數(shù)據(jù)庫操作,來對數(shù)據(jù)庫進(jìn)行簡單的CRUD操作。

關(guān)系型數(shù)據(jù)庫

關(guān)系型數(shù)據(jù)庫(Relational Database,RDB)是一種基于關(guān)系模型來管理數(shù)據(jù)的數(shù)據(jù)庫。HarmonyOS關(guān)系型數(shù)據(jù)庫基于SQLite組件提供了一套完整的對本地?cái)?shù)據(jù)庫進(jìn)行管理的機(jī)制,對外提供了一系列的增、刪、改、查接口,也可以直接運(yùn)行用戶輸入的SQL語句來滿足復(fù)雜的場景需要。運(yùn)作機(jī)制如圖:

pIYBAGAHp26AaK2FAAE3c435YvM771.png

1、創(chuàng)建數(shù)據(jù)庫

//設(shè)置數(shù)據(jù)庫為RdbStore.db

StoreConfig config = StoreConfig.newDefaultConfig(“RdbStore.db”);

DatabaseHelper helper = new DatabaseHelper(getContext());

RdbStore rdbStore = helper.getRdbStore(config, 1, new RdbOpenCallback() {

@Override

public void onCreate(RdbStore rdbStore) {

//創(chuàng)建表

rdbStore.executeSql(“create table if not exists User(userId integer primary key autoincrement,userName text)”);

//更多建表語句可以在這里寫

}

@Override

public void onUpgrade(RdbStore rdbStore, int i, int i1) {

//升級數(shù)據(jù)庫操作

}

});

2、插入數(shù)據(jù)

//使用鍵值對方式插入數(shù)據(jù)庫rdbCreateDb()獲取的就是創(chuàng)建的時(shí)候生成的rdbStore

ValuesBucket values = new ValuesBucket();

values.putInteger(“userId”,1);

values.putString(“userName”,“name1”);

long id = rdbCreateDb().insert(“User”,values);

//使用最原始的sql語句插入數(shù)據(jù)

rdbCreateDb().executeSql(“insert into User (userId,userName) values (2,‘name2’)”);

3、刪除數(shù)據(jù)

RdbPredicates rdbPredicates = new RdbPredicates(“User”).equalTo(“userName”,“name1”);

int i = rdbCreateDb().delete(rdbPredicates);

4、查詢數(shù)據(jù)

String[] columns = new String[]{“userId”,“userName”};

RdbPredicates rdbPredicates = new RdbPredicates(“User”);//構(gòu)建查詢謂詞

ResultSet resultSet = rdbCreateDb().query(rdbPredicates,columns);

while (resultSet.goToNextRow()){

int userId = resultSet.getInt(resultSet.getColumnIndexForName(“userId”));

String userName = resultSet.getString(resultSet.getColumnIndexForName(“userName”));

HiLog.warn(new HiLogLabel(HiLog.LOG_APP, 0, “===demo===”), “查詢到userId=” + userId + “ userName=” +userName);

}

5、修改數(shù)據(jù)

RdbPredicates rdbPredicates = new RdbPredicates(“User”).equalTo(“userName”,“name2”);

ValuesBucket values = new ValuesBucket();

values.putString(“userName”,“name3”);

//更新數(shù)據(jù)

rdbCreateDb().update(values,rdbPredicates);

增刪改查操作都可以通過rdbStore的executeSql方法,直接執(zhí)行sql語句執(zhí)行。語句語法采用SQLite的語法。

對象關(guān)系型數(shù)據(jù)庫

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

pIYBAGAHp4eAPmPbAAF9qY8AI7o439.png

1、環(huán)境配置

1、添加相應(yīng)的jar包到模塊libs里面,相關(guān)文件可以在demo中找到。

o4YBAGAHp5OAbCljAAEDnn9HB8s659.png

2、在模塊的build.gradle中的對應(yīng)添加注解引用

//開啟注解

ohos {

compileOptions {

annotationEnabled true

}

}

//添加注解處理引用

dependencies {

annotationProcessor files(“。/libs/orm_annotations_java.jar”, “。/libs/orm_annotations_processor_java.jar”)

}

2、初始化數(shù)據(jù)庫配置

1、新建數(shù)據(jù)庫實(shí)現(xiàn)類

//entities里放置的是表對應(yīng)的javabean,version對應(yīng)數(shù)據(jù)庫版本

@Database(entities = {OrmUser.class}, version = 1)

public abstract class OrmDBTest extends OrmDatabase {

@Override

public RdbOpenCallback getHelper() {

return new RdbOpenCallback() {

@Override

public void onCreate(RdbStore rdbStore) {

//創(chuàng)建成功后執(zhí)行操作

}

@Override

public void onUpgrade(RdbStore rdbStore, int oldVersion, int newVersion) {

//數(shù)據(jù)庫升級需要執(zhí)行的操作

}

};

}

}

2、新建表對應(yīng)的JavaBean

//對應(yīng)的數(shù)據(jù)庫表名寫在注解里,另外記得get/set要寫齊全

@Entity(tableName = “OrmUser”)

public class OrmUser extends OrmObject {

@PrimaryKey(autoGenerate = true)

private int id;

private int userId;

private String userName;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public int getUserId() {

return userId;

}

public void setUserId(int userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

}

3、ORM對數(shù)據(jù)庫的基本操作

1、創(chuàng)建數(shù)據(jù)庫上下文操作對象

private OrmContext ormCreateDb() {

DatabaseHelper databaseHelper = new DatabaseHelper(getContext());

OrmContext ormContext = databaseHelper.getOrmContext(“OrmDBTest”, “OrmDBTest.db”, OrmDBTest.class);

return ormContext;

}

2、增

OrmUser ormUser = new OrmUser();

ormUser.setUserId(1);

ormUser.setUserName(“name1”);

boolean isSuccess = ormCreateDb().insert(ormUser);

ormCreateDb().flush();

3、查

//查詢userId = 1的數(shù)據(jù)

OrmPredicates ormPredicates = ormCreateDb().where(OrmUser.class).equalTo(“userId”,“1”);

List《OrmUser》 ormUsers = ormCreateDb().query(ormPredicates);

4、改

//將查詢出來的數(shù)據(jù)值修改后更新到數(shù)據(jù)庫

OrmUser ormUser = ormQuery();

if (ormUser == null){

return;

}

ormUser.setUserName(“name2”);

ormCreateDb().update(ormUser);

ormCreateDb().flush();

5、刪

//將查詢出來的數(shù)據(jù)值從數(shù)據(jù)庫中刪除

OrmUser ormUser = ormQuery();

if (ormUser == null){

return;

}

ormCreateDb().delete(ormUser);

ormCreateDb().flush();

總結(jié)

數(shù)據(jù)庫中連接池的最大數(shù)量是4個(gè),同一時(shí)間只能支持一個(gè)寫操作!對象關(guān)系型數(shù)據(jù)的數(shù)據(jù)庫類型只支持基礎(chǔ)數(shù)據(jù)類型及Date、Time、Timestamp、Calendar、Blob(二進(jìn)制大對象)、Clob(字符大對象) 文中相關(guān)的代碼在git:https://github.com/maolinnan/HarmonyosClass

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    764

    瀏覽量

    44128
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3799

    瀏覽量

    64388
  • 關(guān)系型數(shù)據(jù)庫

    關(guān)注

    0

    文章

    7

    瀏覽量

    2334
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1975

    瀏覽量

    30183
收藏 人收藏

    評論

    相關(guān)推薦

    有個(gè)excel數(shù)據(jù)表 想導(dǎo)入鴻蒙數(shù)據(jù)庫,求sqlite數(shù)據(jù)使用文檔?

    有個(gè)excel 數(shù)據(jù)表 想導(dǎo)入鴻蒙數(shù)據(jù)庫, 求sqlite數(shù)據(jù)使用文檔?
    發(fā)表于 06-09 10:10

    什么是關(guān)系數(shù)據(jù)庫

    什么是關(guān)系數(shù)據(jù)庫 關(guān)系數(shù)據(jù)庫簡介   關(guān)系
    發(fā)表于 06-17 07:38 ?9123次閱讀

    什么是非關(guān)系數(shù)據(jù)庫

    什么是非關(guān)系數(shù)據(jù)庫 談到非關(guān)系數(shù)據(jù)庫設(shè)計(jì)的難點(diǎn),朱海峰說:“我們可以從一些場景來看這個(gè)問題
    發(fā)表于 06-17 15:49 ?3135次閱讀

    鴻蒙數(shù)據(jù)庫知識點(diǎn)學(xué)習(xí)

    鴻蒙數(shù)據(jù)庫知識點(diǎn),了解了存儲機(jī)制并且嘗試了使用,發(fā)現(xiàn)鴻蒙數(shù)據(jù)庫真的做到了應(yīng)有盡有,操作還簡單的地步。 鴻蒙
    的頭像 發(fā)表于 09-06 09:34 ?3179次閱讀

    怎么創(chuàng)建SQLite數(shù)據(jù)庫

    大家好,今天給大家分享一篇如何創(chuàng)建SQLite數(shù)據(jù)庫的文章。
    的頭像 發(fā)表于 02-22 16:21 ?6022次閱讀
    怎么創(chuàng)建<b class='flag-5'>SQLite</b><b class='flag-5'>數(shù)據(jù)庫</b>

    OpenHarmony關(guān)系數(shù)據(jù)庫概述

    關(guān)系數(shù)據(jù)庫(Relational Database, 以下簡稱RDB)是一種基于關(guān)系模型來管理數(shù)據(jù)數(shù)
    的頭像 發(fā)表于 03-28 18:08 ?1054次閱讀
    OpenHarmony<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫</b>概述

    關(guān)系數(shù)據(jù)庫的基本原理(什么是關(guān)系數(shù)據(jù)庫

    什么是關(guān)系數(shù)據(jù)庫?關(guān)系數(shù)據(jù)庫,簡稱 RDBMS是由許多數(shù)
    的頭像 發(fā)表于 07-10 09:06 ?1422次閱讀

    SQLite數(shù)據(jù)庫的特點(diǎn) SQLite數(shù)據(jù)庫簡單介紹

    SQLite數(shù)據(jù)庫的特點(diǎn) SQLite數(shù)據(jù)庫簡單介紹 SQLite數(shù)據(jù)庫是一種輕型的嵌入式
    的頭像 發(fā)表于 08-28 16:40 ?5532次閱讀

    如何創(chuàng)建一個(gè)Sqlite數(shù)據(jù)庫?

    如何創(chuàng)建一個(gè)Sqlite數(shù)據(jù)庫Sqlite是一種輕量級、占用空間小、操作速度快的嵌入式數(shù)據(jù)庫,使用它可以方便地存儲和管理數(shù)據(jù)
    的頭像 發(fā)表于 08-28 16:40 ?4463次閱讀

    什么是Sqlite數(shù)據(jù)庫?

    什么是Sqlite數(shù)據(jù)庫?? Sqlite數(shù)據(jù)庫是一種輕量級的關(guān)系
    的頭像 發(fā)表于 08-28 16:41 ?2573次閱讀

    SQLite數(shù)據(jù)庫能共享嗎?

    SQLite數(shù)據(jù)庫能共享嗎? SQLite數(shù)據(jù)庫是一種輕量級的數(shù)據(jù)庫管理系統(tǒng),它被廣泛使用于移動(dòng)應(yīng)用、本地桌面應(yīng)用以及小型Web應(yīng)用中。
    的頭像 發(fā)表于 08-28 16:41 ?2641次閱讀

    SQLite數(shù)據(jù)庫與python的區(qū)別

    SQLite數(shù)據(jù)庫與python的區(qū)別 SQLite是一種輕量級關(guān)系數(shù)據(jù)庫管理系統(tǒng),是一個(gè)嵌入
    的頭像 發(fā)表于 08-28 16:41 ?867次閱讀

    SQLite數(shù)據(jù)庫增刪改查

    SQLite數(shù)據(jù)庫增刪改查? SQLite是一種輕量級的RDBMS(關(guān)系數(shù)據(jù)庫管理系統(tǒng)),具有
    的頭像 發(fā)表于 08-28 17:09 ?1209次閱讀

    SQLite數(shù)據(jù)庫文件頭部特征

    SQLite數(shù)據(jù)庫文件頭部特征 SQLite是一種輕量級關(guān)系數(shù)據(jù)庫管理系統(tǒng),被廣泛應(yīng)用于移動(dòng)設(shè)
    的頭像 發(fā)表于 08-28 17:15 ?1068次閱讀

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.rdb (關(guān)系數(shù)據(jù)庫)】

    關(guān)系數(shù)據(jù)庫(Relational Database,RDB)是一種基于關(guān)系模型來管理數(shù)據(jù)數(shù)據(jù)庫
    的頭像 發(fā)表于 06-10 18:35 ?1325次閱讀