日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

HarmonyOS之数据管理·关系型数据库的应用

發布時間:2024/5/21 数据库 111 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HarmonyOS之数据管理·关系型数据库的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介

① 基本概念
  • 關系型數據庫(Relational Database,RDB)是一種基于關系模型來管理數據的數據庫。HarmonyOS 關系型數據庫基于 SQLite 組件提供了一套完整的對本地數據庫進行管理的機制,對外提供了一系列的增、刪、改、查接口,也可以直接運行用戶輸入的 SQL 語句來滿足復雜的場景需要。HarmonyOS 提供的關系型數據庫功能更加完善,查詢效率更高。
  • 關系型數據庫:創建在關系模型基礎上的數據庫,以行和列的形式存儲數據。
  • 謂詞:數據庫中用來代表數據實體的性質、特征或者數據實體之間關系的詞項,主要用來定義數據庫的操作條件。
  • 結果集:指用戶查詢之后的結果集合,可以對數據進行訪問。結果集提供了靈活的數據訪問方式,可以更方便的拿到用戶想要的數據。
  • SQLite 數據庫:一款輕型的數據庫,是遵守 ACID 的關系型數據庫管理系統,它是一個開源的項目。
② 運作機制
  • HarmonyOS 關系型數據庫對外提供通用的操作接口,底層使用 SQLite 作為持久化存儲引擎,支持 SQLite 具有的所有數據庫特性,包括但不限于事務、索引、視圖、觸發器、外鍵、參數化查詢和預編譯 SQL 語句。
  • 關系型數據庫運作機制如下圖所示:

③ 配置
  • 如果不指定數據庫的日志模式,那么系統默認日志方式是 WAL(Write Ahead Log)模式。
  • 如果不指定數據庫的落盤模式,那么系統默認落盤方式是 FULL 模式。
  • HarmonyOS 數據庫使用的共享內存默認大小是 2MB。
  • 數據庫中連接池的最大數量是 4 個,用以管理用戶的讀寫操作。
  • 為保證數據的準確性,數據庫同一時間只能支持一個寫操作。
④ 應用場景
  • 關系型數據庫是在 SQLite 基礎上實現的本地數據操作機制,提供給用戶無需編寫原生 SQL 語句就能進行數據增刪改查的方法,同時也支持原生 SQL 操作。

二、關系型數據庫 API

① 數據庫的創建和刪除
  • 關系型數據庫提供了數據庫創建方式,以及對應的刪除接口,涉及的 API 如下所示:
類名接口名描述
StoreConfig.Builderpublic builder()對數據庫進行配置,包括設置數據庫名、存儲模式、日志模式、同步模式,是否為只讀,及對數據庫加密
RdbOpenCallbackpublic abstract void onCreate(RdbStore store)數據庫創建時被回調,開發者可以在該方法中初始化表結構,并添加一些應用使用到的初始化數據
RdbOpenCallbackpublic abstract void onUpgrade(RdbStore store, int currentVersion, int targetVersion)數據庫升級時被回調
DatabaseHelperpublic RdbStore getRdbStore(StoreConfig config, int version, RdbOpenCallback openCallback, ResultSetHook resultSetHook)根據配置創建或打開數據庫
DatabaseHelperpublic boolean deleteRdbStore(String name)刪除指定的數據庫
② 數據庫的加密
  • 關系型數據庫提供數據庫加密的能力,創建數據庫時傳入指定密鑰、創建加密數據庫,后續打開加密數據庫時,需要傳入正確密鑰。
  • 數據庫傳入密鑰接口如下:
類名接口名描述
StoreConfig.BuilderBuilder setEncryptKey(byte[] encryptKey)為數據庫配置類設置數據庫加密密鑰,創建或打開數據庫時傳入包含數據庫加密密鑰的配置類,即可創建或打開加密數據庫
③ 數據庫的增刪改查
  • 關系型數據庫提供本地數據增刪改查操作的能力。
  • 新增:關系型數據庫提供了插入數據的接口,通過 ValuesBucket 輸入要存儲的數據,通過返回值判斷是否插入成功,插入成功時返回最新插入數據所在的行號,失敗則返回-1。數據庫插入 API 如下所示:
類名接口名描述
RdbStorelong insert(String table, ValuesBucket initialValues)向數據庫插入數據。table:待添加數據的表名。initialValues:以ValuesBucket存儲的待插入的數據。它提供一系列put方法,如putString(String columnName, String values),putDouble(String columnName, double value),用于向ValuesBucket中添加數據
  • 更新:調用更新接口,傳入要更新的數據,并通過 AbsRdbPredicates 指定更新條件。該接口的返回值表示更新操作影響的行數。如果更新失敗,則返回 0。數據庫更新 API 如下:
類名接口名描述
RdbStoreint update(ValuesBucket values, AbsRdbPredicates predicates)更新數據庫表中符合謂詞指定條件的數據。
values:以ValuesBucket存儲的要更新的數據。
predicates:指定了更新操作的表名和條件。AbsRdbPredicates的實現類有兩個:RdbPredicates和RawRdbPredicates。RdbPredicates:支持調用謂詞提供的equalTo等接口,設置更新條件。RawRdbPredicates:僅支持設置表名、where條件子句、whereArgs三個參數,不支持equalTo等接口調用
  • 刪除:調用刪除接口,通過 AbsRdbPredicates 指定刪除條件,該接口的返回值表示刪除的數據行數,可根據此值判斷是否刪除成功。如果刪除失敗,則返回 0。數據庫刪除 API 如下:
類名接口名描述
RdbStoreint delete(AbsRdbPredicates predicates)刪除數據。
predicates:Rdb謂詞,指定了刪除操作的表名和條件。
AbsRdbPredicates的實現類有兩個:RdbPredicates和RawRdbPredicates。RdbPredicates:支持調用謂詞提供的equalTo等接口,設置更新條件。RawRdbPredicates:僅支持設置表名、where條件子句、whereArgs三個參數,不支持equalTo等接口調用
  • 查詢:關系型數據庫提供了兩種查詢數據的方式:
    • 直接調用查詢接口,使用該接口,會將包含查詢條件的謂詞自動拼接成完整的 SQL 語句進行查詢操作,無需用戶傳入原生的 SQL。
    • 執行原生的用于查詢的 SQL 語句。
  • 數據庫查詢 API 如下:
類名接口名描述
RdbStoreResultSet query(AbsRdbPredicates predicates, String[] columns)查詢數據。
predicates:謂詞,可以設置查詢條件。AbsRdbPredicates的實現類有兩個RdbPredicates和RawRdbPredicates。
RdbPredicates:支持調用謂詞提供的equalTo等接口,設置查詢條件。
RawRdbPredicates:僅支持設置表名、where條件子句、whereArgs三個參數,不支持equalTo等接口調用。
columns:規定查詢返回的列。
RdbStoreResultSet querySql(String sql, String[] sqlArgs)執行原生的用于查詢操作的SQL語句。 sql:原生用于查詢的sql語句。sqlArgs:sql語句中占位符參數的值,若select語句中沒有使用占位符,該參數可以設置為null
④ 數據庫謂詞的使用
  • 關系型數據庫提供了用于設置數據庫操作條件的謂詞 AbsRdbPredicates,其中包括兩個實現子類 RdbPredicates 和 RawRdbPredicates:
    • RdbPredicates:開發者無需編寫復雜的 SQL 語句,僅通過調用該類中條件相關的方法,如 equalTo、notEqualTo、groupBy、orderByAsc、beginsWith 等,就可自動完成SQL 語句拼接,方便用戶聚焦業務操作。
    • RawRdbPredicates:可滿足復雜 SQL 語句的場景,支持開發者自己設置 where 條件子句和 whereArgs 參數。不支持 equalTo 等條件接口的使用。
  • 數據庫謂詞 API 如下:
類名接口名描述
RdbPredicatesRdbPredicates equalTo(String field, String value)設置謂詞條件,滿足field字段與value值相等
RdbPredicatesRdbPredicates notEqualTo(String field, String value)設置謂詞條件,滿足field字段與value值不相等
RdbPredicatesRdbPredicates beginsWith(String field, String value)設置謂詞條件,滿足field字段以value值開頭
RdbPredicatesRdbPredicates between(String field, int low, int high)設置謂詞條件,滿足field字段在最小值low和最大值high之間
RdbPredicatesRdbPredicates orderByAsc(String field)設置謂詞條件,根據field字段升序排列
RawRdbPredicatesvoid setWhereClause(String whereClause)設置where條件子句
RawRdbPredicatesvoid setWhereArgs(List whereArgs)設置whereArgs參數,該值表示where子句中占位符的值
⑤ 查詢結果集的使用
  • 關系型數據庫提供了查詢返回的結果集 ResultSet,指向查詢結果中的一行數據,供用戶對查詢結果進行遍歷和訪問。ResultSet 的對外 API 如下表格:
類名接口名描述
ResultSetboolean goTo(int offset)從結果集當前位置移動指定偏移量
ResultSetboolean goToRow(int position)將結果集移動到指定位置
ResultSetboolean goToNextRow()將結果集向后移動一行
ResultSetboolean goToPreviousRow()將結果集向前移動一行
ResultSetboolean isStarted()判斷結果集是否被移動過
ResultSetboolean isEnded()判斷結果集當前位置是否在最后一行之后
ResultSetboolean isAtFirstRow()判斷結果集當前位置是否在第一行
ResultSetboolean isAtLastRow()判斷結果集當前位置是否在最后一行
ResultSetint getRowCount()獲取當前結果集中的記錄條數
ResultSetint getColumnCount()獲取結果集中的列數
ResultSetString getString(int columnIndex)獲取當前行指定索列的值,以String類型返回
ResultSetbyte[] getBlob(int columnIndex)獲取當前行指定列的值,以字節數組形式返回
ResultSetdouble getDouble(int columnIndex)獲取當前行指定列的值,以double型返回
⑥ 事務
  • 關系型數據庫提供事務機制,來保證用戶操作的原子性。對單條數據進行數據庫操作時,無需開啟事務;插入大量數據時,開啟事務可以保證數據的準確性。如果中途操作出現失敗,會執行回滾操作。
  • 事務 API 如下:
類名接口名描述
RdbStorebeginTransaction()開啟事務
RdbStoremarkAsCommit()設置事務的標記為成功
RdbStoreendTransaction()結束事務
⑦ 事務和結果集觀察者
  • 關系型數據庫提供了事務和結果集觀察者能力,當對應的事件被觸發時,觀察者會收到通知。
  • API 如下所示:
類名接口名描述
RdbStorebeginTransactionWithObserver(TransactionObserver transactionObserver)開啟事務,并觀察事務的啟動、提交和回滾
ResultSetvoid registerObserver(DataObserver observer)注冊結果集的觀察者
ResultSetvoid unregisterObserver(DataObserver observer)注銷結果集的觀察者
⑧ 數據庫的備份和恢復
  • 用戶可以將當前數據庫的數據進行保存進行備份,還可以在需要的時候進行數據恢復。
  • 數據庫備份和恢復 API 如下:
類名接口名描述
RdbStoreboolean restore(String srcName)數據庫恢復接口,從指定的非加密數據庫文件中恢復數據
RdbStoreboolean restore(String srcName, byte[] srcEncryptKey, byte[] destEncryptKey)數據庫恢復接口,從指定的數據庫文件(加密和非加密均可)中恢復數據
RdbStoreboolean backup(String destName)數據庫備份接口,備份出的數據庫文件是非加密的
RdbStoreboolean backup(String destName, byte[] destEncryptKey)數據庫備份接口,此方法經常用在備份出加密數據庫場景

三、關系型數據庫的使用

① 創建數據庫
  • 配置數據庫相關信息,包括數據庫的名稱、存儲模式、是否為只讀模式等。
  • 初始化數據庫表結構和相關數據。
  • 創建數據庫。
StoreConfig config = StoreConfig.newDefaultConfig("RdbStoreTest.db");private static RdbOpenCallback callback = new RdbOpenCallback() {@Overridepublic void onCreate(RdbStore store) {store.executeSql("CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER, salary REAL, blobType BLOB)");}@Overridepublic void onUpgrade(RdbStore store, int oldVersion, int newVersion) {}};DatabaseHelper helper = new DatabaseHelper(context);RdbStore store = helper.getRdbStore(config, 1, callback, null);
② 插入數據
  • 構造要插入的數據,以 ValuesBucket 形式存儲。
  • 調用關系型數據庫提供的插入接口。
ValuesBucket values = new ValuesBucket();values.putInteger("id", 1);values.putString("name", "zhangsan");values.putInteger("age", 18);values.putDouble("salary", 100.5);values.putByteArray("blobType", new byte[] {1, 2, 3});long id = store.insert("test", values);
③ 查詢數據
  • 構造用于查詢的謂詞對象,設置查詢條件。
  • 指定查詢返回的數據列。
  • 調用查詢接口查詢數據。
  • 調用結果集接口,遍歷返回結果。
String[] columns = new String[] {"id", "name", "age", "salary"};RdbPredicates rdbPredicates = new RdbPredicates("test").equalTo("age", 25).orderByAsc("salary"); ResultSet resultSet = store.query(rdbPredicates, columns);resultSet.goToNextRow();

四、完整示例

  • HarmonyOS之基于Data Ability的關系型數據庫操作方法。

總結

以上是生活随笔為你收集整理的HarmonyOS之数据管理·关系型数据库的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色小说视频网站 | www.av黄色 | 人妻无码一区二区三区久久99 | 91视频88av | 久久亚洲AV无码精品 | 亚洲精品久久久狠狠狠爱 | 国产日韩精品suv | 亚洲乱码国产乱码精品天美传媒 | av在线资源观看 | 久久私人影院 | 日本美女毛茸茸 | 狠狠操夜夜操 | 亚洲人无码成www久久 | 老熟女高潮一区二区三区 | 欧美视频亚洲视频 | 精品国产一区二区三区久久久久久 | 狠狠干人人干 | 精品自拍偷拍 | 曰批又黄又爽免费视频 | 精品人妻一区二区三区免费 | 极品少妇一区二区三区 | 精品国产午夜福利在线观看 | 精品国产黄 | 久久久久久久久久久丰满 | 日本熟妇一区二区三区 | 国产无玛 | 日韩三级视频 | 婷婷爱五月 | 好吊操这里有精品 | 销魂美女一区二区 | 日韩精品一 | 日本私人影院 | 片多多在线观看 | 日韩经典一区二区 | 男女视频在线 | 91亚州 | 亚洲成年人免费观看 | 免费黄色片网站 | 日韩欧美电影一区二区三区 | 网友自拍av| 久久精国产 | 欧美国产在线观看 | 91视频免费看 | 国产情侣小视频 | 女人做爰全过程免费观看美女 | 狠狠操av| 国产精品对白 | 天天摸天天操天天爽 | 天天摸天天舔天天操 | 国产区精品在线观看 | 国产一区导航 | 免费荫蒂添的好舒服视频 | 久热这里只有 | www.好吊色 | 国产一区二区三区四区hd | 亚洲最大福利网 | 亚洲黄网在线观看 | 无码精品一区二区三区在线 | 亚洲四虎影院 | 午夜看片 | 亚洲男人天堂2018 | 中文字幕一区二区久久人妻 | 久久久电影| 波多野结衣视频播放 | 不卡在线视频 | 欧美亚洲视频一区 | 日韩视频一区二区三区 | 欧美一级高清片 | 欧美黄色免费 | 欧美性xxxxxx| jizz免费视频 | 中文字幕在线亚洲 | 麻豆系列在线观看 | 黄色在线一区 | 亚洲美女自拍偷拍 | 99国产精品久久久久久久成人 | 国产污污在线观看 | 亚洲天堂中文字幕在线 | 青青草手机在线视频 | 99久久久无码国产精品 | 丰满少妇在线观看网站 | 懂色一区二区二区av免费观看 | 亚洲欧洲成人在线 | 善良的老师伦理bd中字 | 国产丝袜一区二区三区 | 日本在线中文 | 欧美黑人巨大xxx极品 | 久久久高清视频 | 伊人ab| 娇妻高潮浓精白浆xxⅹ | 狠狠热免费视频 | 国产美女精品久久 | 伊人视屏 | 亚州av影院 | 黄色理伦片 | 直接看的av | 色综合色综合色综合 | jizz免费在线观看 | 欧美女优视频 |