??大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方向。在移動端開發、鴻蒙開發、物聯網、嵌入式、云原生、開源等領域有深厚造詣。
圖書作者:《ESP32-C3 物聯網工程開發實戰》
圖書作者:《SwiftUI 入門,進階與實戰》
超級個體:COC上海社區主理人
特約講師:大學講師,谷歌亞馬遜分享嘉賓
科技博主:華為HDE/HDG
我的博客內容涵蓋廣泛,主要分享技術教程、Bug解決方案、開發工具使用、前沿科技資訊、產品評測與使用體驗。我特別關注云服務產品評測、AI 產品對比、開發板性能測試以及技術報告,同時也會提供產品優缺點分析、橫向對比,并分享技術沙龍與行業大會的參會體驗。我的目標是為讀者提供有深度、有實用價值的技術洞察與分析。
展菲:您的前沿技術領航員
👋 大家好,我是展菲!
📱 全網搜索“展菲”,即可縱覽我在各大平臺的知識足跡。
📣 公眾號“Swift社區”,每周定時推送干貨滿滿的技術長文,從新興框架的剖析到運維實戰的復盤,助您技術進階之路暢通無阻。
💬 微信端添加好友“fzhanfei”,與我直接交流,不管是項目瓶頸的求助,還是行業趨勢的探討,隨時暢所欲言。
📅 最新動態:2025 年 3 月 17 日
快來加入技術社區,一起挖掘技術的無限潛能,攜手邁向數字化新征程!
文章目錄
- 摘要
- 引言
- 鴻蒙分布式數據庫開發全流程
- 導入和初始化分布式數據庫
- 添加依賴
- 初始化數據庫
- 數據的基本操作:增刪改查
- 插入數據
- 查詢數據
- 應用場景舉例
- 家庭賬本 App:多個設備實時同步賬目
- 校園點名系統:老師和學生設備共享考勤信息
- IoT家庭場景:設備間共享狀態數據
- QA 環節:常見問題答疑
- Q1:分布式數據庫需要聯網嗎?
- Q2:如何確保數據同步成功?
- Q3:不同設備是否需要權限聲明?
- Q4:可否對分布式數據庫加密?
- 總結
摘要
在設備之間數據聯動的時代,鴻蒙系統提供了強大的分布式能力,尤其是分布式數據庫(Distributed RDB),可以幫助我們在多個設備間共享和同步數據。你可以在一臺手機上存數據,另一臺平板直接讀取——就像它們共享了同一個數據庫一樣。
這篇文章就會帶你一步一步上手鴻蒙中的分布式數據庫,包括如何配置、初始化、增刪改查操作,以及如何實現設備間的數據同步。還會提供兩個實戰場景演示,最后通過問答環節解決你開發中可能遇到的問題。
引言
隨著鴻蒙系統的持續發展,它提出的“分布式軟總線”理念也在實際開發中發揮了越來越大的作用。尤其是在多設備協同辦公、家庭設備數據互通、IoT設備同步控制等方面,分布式數據庫成為了連接多端的紐帶。
例如,一款筆記軟件可以在手機記錄內容后自動同步到平板或電視上繼續閱讀;一個家庭記賬 App 能讓每個家庭成員的設備實時同步賬單信息。聽起來像云同步?但鴻蒙是原生設備直連的數據同步,速度快、成本低、體驗好。
鴻蒙分布式數據庫開發全流程
導入和初始化分布式數據庫
添加依賴
在 entry/build.gradle
文件中加入如下模塊依賴(僅供參考):
dependencies {implementation 'ohos:data-distributed'
}
初始化數據庫
通過 DatabaseHelper
創建分布式數據庫,并設置 Options
指定 setDistributed(true)
。
import ohos.data.DatabaseHelper;
import ohos.data.distributed.common.Options;
import ohos.data.rdb.ValuesBucket;
import ohos.data.rdb.RdbPredicates;
import ohos.data.distributed.user.RdbDistributedStore;DatabaseHelper helper = new DatabaseHelper(this);// 設置為分布式數據庫
Options options = new Options.Builder().setDistributed(true).build();// 獲取數據庫實例
RdbDistributedStore store = helper.getRdbDistributedStore("MyDistributedDB", options, null);// 創建表
store.executeSql("CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY, name TEXT)");
數據的基本操作:增刪改查
插入數據
ValuesBucket values = new ValuesBucket();
values.putInteger("id", 1);
values.putString("name", "張三");store.insert("user", values);
查詢數據
RdbPredicates predicates = new RdbPredicates("user");
ResultSet resultSet = store.query(predicates, null); // 查詢所有字段while (resultSet.goToNextRow()) {int id = resultSet.getInt(resultSet.getColumnIndexForName("id"));String name = resultSet.getString(resultSet.getColumnIndexForName("name"));HiLog.info(LABEL_LOG, "用戶ID: %{public}d, 姓名: %{public}s", id, name);
}
resultSet.close();
應用場景舉例
家庭賬本 App:多個設備實時同步賬目
場景:父親在手機上記了一筆支出,兒子在平板上幾秒鐘后就能看到這條記錄。
// 添加一條消費記錄
ValuesBucket expense = new ValuesBucket();
expense.putInteger("id", 1001);
expense.putString("name", "超市購物");store.insert("user", expense);
設備之間自動同步,無需手動操作或云服務支持。只要它們在同一鴻蒙分布式網絡下,數據就能共享。
校園點名系統:老師和學生設備共享考勤信息
場景:老師在課堂用手機記錄學生簽到信息,系統會自動同步到教務辦公室的鴻蒙平板。
store.executeSql("CREATE TABLE IF NOT EXISTS attendance (stu_id INTEGER, status TEXT)");ValuesBucket row = new ValuesBucket();
row.putInteger("stu_id", 202306);
row.putString("status", "出勤");store.insert("attendance", row);
IoT家庭場景:設備間共享狀態數據
場景:智能空調把當前溫度寫入分布式數據庫,智能窗簾讀取這個數據決定是否開啟。
store.executeSql("CREATE TABLE IF NOT EXISTS home_status (device TEXT, value TEXT)");ValuesBucket temp = new ValuesBucket();
temp.putString("device", "temperatureSensor");
temp.putString("value", "28");store.insert("home_status", temp);
QA 環節:常見問題答疑
Q1:分布式數據庫需要聯網嗎?
不需要依賴互聯網,但設備之間需要通過鴻蒙的分布式軟總線連接在同一局域網或近場通信環境中。
Q2:如何確保數據同步成功?
使用 KvManager
等模塊可監聽數據同步事件,確保同步完成后再進行業務操作。
Q3:不同設備是否需要權限聲明?
是的,需要聲明分布式相關權限,如:
<uses-permission ohos:name="ohos.permission.DISTRIBUTED_DATASYNC" />
Q4:可否對分布式數據庫加密?
目前 RDB 本身支持加密,但分布式場景需要額外的安全控制,可以配合 DataEncryptionUtils
等工具。
總結
鴻蒙的分布式數據庫功能,為開發者打開了多設備數據互通的新大門。相比傳統的云端存儲方案,它更快速、更私密、更適合本地設備聯動場景。
無論你是做多端協同辦公、智能家居,還是教育、醫療等應用場景,都可以考慮利用鴻蒙原生的分布式數據庫功能,把數據真正“跑”起來,跑到用戶每一個設備上。
下一步,你可以試著將已有的單機數據模型升級成分布式結構,再配合 分布式 UI
、多設備協同
等特性,打造完整的分布式體驗。