赞
踩
鸿蒙使用SQLite 作为持久化存储引擎,分为关系型数据库(Relational Database)和对象映射关系型 数据库(Object Relational Mapping Database),此外还提供一种轻量级偏好数据库 (Light Weight Preference Database)
具体API参考官网,这里不具体展开关系型数据库
具体API参考官网,这里不具体展开对象映射关系型
具体API参考官网,轻量级偏好数据库
支持用户数据跨设备同步,通过帐 号、应用唯一标识和数据库三元组来对属于不同应用的数据进行隔离。
使用方式
1.在config.json中添加ohos.permission.DISTRIBUTED_DATASYNC权限。
// 添加在abilities同一目录层级
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC"
}
]
2.创建KvManagerConfig对象和分布式数据库管理器
KvManagerConfig config = new KvManagerConfig(context);
KvManager kvManager = KvManagerFactory.getInstance().createKvManager(config);
3.获取/创建单版本分布式数据库。
创建单版本分布式数据库,默认开启组网设备间自动同步功能,如果应用对性能比较敏感建议设置关闭自动同步功能setAutoSync(false),主动调用sync接口同步。
try {
Options options = new Options();
options.setCreateIfMissing(true).setEncrypt(false).setKvStoreType(KvStoreType.SINGLE_VERSION);
String storeId = "testApp";
SingleKvStore singleKvStore = kvManager.getKvStore(options, storeId);
} catch (KvStoreException e) {
HiLog.warn(LABEL_LOG, "getKvStore:" + e.getKvStoreErrorCode());
}
4.订阅分布式数据变化。
class KvStoreObserverClient implements KvStoreObserver {
@Override
public void onChange(ChangeNotification notification) {
List<Entry> insertEntries = notification.getInsertEntries();
List<Entry> updateEntries = notification.getUpdateEntries();
List<Entry> deleteEntries = notification.getDeleteEntries();
}
}
KvStoreObserver kvStoreObserverClient = new KvStoreObserverClient();
singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, kvStoreObserverClient);
5.数据写入
单条写入使用putString,对性能比较敏感,建议使用批量写入putBatch
try {
String key = "todayWeather";
String value = "Sunny";
singleKvStore.putString(key, value);
} catch (KvStoreException e) {
HiLog.warn(LABEL_LOG, "putString:" + e.getKvStoreErrorCode());
}
6.查询数据。
try {
String key = "todayWeather";
String value = singleKvStore.getString(key);
} catch (KvStoreException e) {
HiLog.warn(LABEL_LOG, "getString:" + e.getKvStoreErrorCode());
}
7.同步数据
同步方式为PUSH_ONLY
List<DeviceInfo> deviceInfoList = kvManager.getConnectedDevicesInfo(DeviceFilterStrategy.NO_FILTER);
List<String> deviceIdList = new ArrayList<>();
for (DeviceInfo deviceInfo : deviceInfoList) {
deviceIdList.add(deviceInfo.getId());
}
singleKvStore.sync(deviceIdList, SyncMode.PUSH_ONLY);
8.操作完成关闭数据库
try {
kvManager.closeKvStore(singleKvStore);
} catch (KvStoreException e) {
HiLog.warn(LABEL_LOG, "closeKvStore:" + e.getKvStoreErrorCode());
}
9.删除分布式数据库
try {
kvManager.deleteKvStore(storeId);
} catch (KvStoreException e) {
HiLog.warn(LABEL_LOG, "deleteKvStore:" + e.getKvStoreErrorCode());
}
在多个终端设备间为单个设备上应用程序创建的文件提供多终端的分布式共享能力。
应用通过Context.getDistributedDir()接口获取分布式目录,在该目录下创建、删除、读写文件或目录。
使用方式
1.a设备获取目录,创建文件hello.txt,并写入内容"Hello World"。
File distDir = context.getDistributedDir();
String filePath = distDir + File.separator + "hello.txt";
FileWriter fileWriter = new FileWriter(filePath, true);
fileWriter.write("Hello World");
fileWriter.close();
2.通过Context.getDistributedDir()接口获取分布式目录,进行相关操作
File distDir = context.getDistributedDir();
String filePath = distDir + File.separator + "hello.txt";
FileReader fileReader = new FileReader(filePath);
char[] buffer = new char[1024];
fileReader.read(buffer);
fileReader.close();
System.out.println(buffer);
在单个设备上,为应用程序提供搜索引擎级的全文索引管理、建立索引和搜索功能。
详情见官方文档融合搜索
这边不具体展开,暂时不需要这种场景。
为应用开发者提供系统存储路径、存储设备列表,存储设备属性的查询和管理功能。主要是对本地存储、SD卡、U盘设备进行操作,结构如图所示:
开发API如下:
代码示例:
// 获取默认存储设备挂载状态
MountState status = DataUsage.getDiskMountedStatus();
// 获取存储设备列表
Optional<List<Volume>> list = DataUsage.getVolumes();
// 默认存储设备是否为可插拔设备
boolean pluggable = DataUsage.isDiskPluggable();
static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
// 获取example.txt 文件所在的存储设备的视图属性
Optional<Volume> volume = DataUsage.getVolume(new File("/sdcard/example.txt"));
volume.ifPresent(theVolume -> {
HiLog.info(LABEL, "isEmulated: %{public}t", theVolume.isEmulated());
HiLog.info(LABEL, "isPluggable: %{public}t", theVolume.isPluggable());
HiLog.info(LABEL, "Description: %{public}s", theVolume.getDescription());
HiLog.info(LABEL, "Volume UUID: %{public}d", theVolume.getVolUuid());
}
);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。