亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
1031
2022-05-29
關系型數據庫(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 如下所示:
關系型數據庫提供數據庫加密的能力,創建數據庫時傳入指定密鑰、創建加密數據庫,后續打開加密數據庫時,需要傳入正確密鑰。
數據庫傳入密鑰接口如下:
關系型數據庫提供本地數據增刪改查操作的能力。
新增:關系型數據庫提供了插入數據的接口,通過 ValuesBucket 輸入要存儲的數據,通過返回值判斷是否插入成功,插入成功時返回最新插入數據所在的行號,失敗則返回-1。數據庫插入 API 如下所示:
更新:調用更新接口,傳入要更新的數據,并通過 AbsRdbPredicates 指定更新條件。該接口的返回值表示更新操作影響的行數。如果更新失敗,則返回 0。數據庫更新 API 如下:
刪除:調用刪除接口,通過 AbsRdbPredicates 指定刪除條件,該接口的返回值表示刪除的數據行數,可根據此值判斷是否刪除成功。如果刪除失敗,則返回 0。數據庫刪除 API 如下:
查詢:關系型數據庫提供了兩種查詢數據的方式:
直接調用查詢接口,使用該接口,會將包含查詢條件的謂詞自動拼接成完整的 SQL 語句進行查詢操作,無需用戶傳入原生的 SQL。
執行原生的用于查詢的 SQL 語句。
數據庫查詢 API 如下:
關系型數據庫提供了用于設置數據庫操作條件的謂詞 AbsRdbPredicates,其中包括兩個實現子類 RdbPredicates 和 RawRdbPredicates:
RdbPredicates:開發者無需編寫復雜的 SQL 語句,僅通過調用該類中條件相關的方法,如 equalTo、notEqualTo、groupBy、orderByAsc、beginsWith 等,就可自動完成SQL 語句拼接,方便用戶聚焦業務操作。
RawRdbPredicates:可滿足復雜 SQL 語句的場景,支持開發者自己設置 where 條件子句和 whereArgs 參數。不支持 equalTo 等條件接口的使用。
數據庫謂詞 API 如下:
關系型數據庫提供了查詢返回的結果集 ResultSet,指向查詢結果中的一行數據,供用戶對查詢結果進行遍歷和訪問。ResultSet 的對外 API 如下表格:
關系型數據庫提供事務機制,來保證用戶操作的原子性。對單條數據進行數據庫操作時,無需開啟事務;插入大量數據時,開啟事務可以保證數據的準確性。如果中途操作出現失敗,會執行回滾操作。
事務 API 如下:
關系型數據庫提供了事務和結果集觀察者能力,當對應的事件被觸發時,觀察者會收到通知。
API 如下所示:
用戶可以將當前數據庫的數據進行保存進行備份,還可以在需要的時候進行數據恢復。
數據庫備份和恢復 API 如下:
配置數據庫相關信息,包括數據庫的名稱、存儲模式、是否為只讀模式等。
初始化數據庫表結構和相關數據。
創建數據庫。
StoreConfig config = StoreConfig.newDefaultConfig("RdbStoreTest.db"); private static RdbOpenCallback callback = new RdbOpenCallback() { @Override public 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)"); } @Override public void onUpgrade(RdbStore store, int oldVersion, int newVersion) { } }; DatabaseHelper helper = new DatabaseHelper(context); RdbStore store = helper.getRdbStore(config, 1, callback, null);
1
2
3
4
5
6
7
8
9
10
11
12
構造要插入的數據,以 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);
1
2
3
4
5
6
7
構造用于查詢的謂詞對象,設置查詢條件。
指定查詢返回的數據列。
調用查詢接口查詢數據。
調用結果集接口,遍歷返回結果。
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();
1
2
3
4
HarmonyOS之基于Data Ability的關系型數據庫操作方法。
數據庫 數據管理服務 DAS
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。