赞
踩
config的module的abilities同级
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC"
},
{
"name": "ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"
},
{
"name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"
},
{
"name": "ohos.permission.GET_BUNDLE_INFO"
}
]
MainAbility的onStart方法中声明使用
requestPermissionsFromUser(new String[]{"ohos.permission.DISTRIBUTED_DATASYNC"}, 0);
因为数据库很多情况下都是跨AbilitySlice使用的所以需要在AbilitySlice中声明 然后在DBUtils工具类中获取
private SingleKvStore singleKvStore = null;//数据库 kv就是key-value的类型数据库的简写
//在onStart 方法里声明/获取数据库 创建数据库和获取数据库合二为一的 这个DBUtils工具类见下面==》四、工具类中声明/获取数据库的代码this是创建数据必要的上下文 RecordAccouontsDB是数据库名字 这个随便你自己起
singleKvStore = DBUtils.initOrGetDB(this,"RecordAccouontsDB");
//在需要存数据的地方 因为分布式数据库只有 key和value 所以 value 用的json的字符串 和数据库存储有关代码需要用try catch包起来
singleKvStore.putString("key"+ id, "{\"id\":"+id+
",\"money\":"+money+
",\"paymentMatters\":\""+paymentMatters+
"\",\"dateYear\":"+dateYear+
"\",\"inOrExp\":"+inOrExp+"}");
//数据库里的数据变化监听
singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, new KvStoreObserver() {
@Override
public void onChange(ChangeNotification changeNotification) {
//刷新页面上的数据,同样有一个坑,onChange方法实质上,在一个子线程里执行
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
//在这里执行页面ui组件的显示刷新 后面的3.4 3.5都是写在这里的
}
});
}
});
//谓词查询
Query query = Query.select();
query.equalTo("$.dateYear", DateUtils.getCurrentYear())
.and().greaterThanOrEqualTo("$.money",5);
List<Entry> entries = singleKvStore.getEntries(query);
//复位查询关键词 这样就不用反复声明了
query.reset();
query.equalTo("$.id","123456");
entries = singleKvStore.getEntries(query);
//详见官方分布式数据服务关键API功能介绍
//https://developer.harmonyos.com/cn/docs/documentation/doc-guides/database-mdds-guidelines-0000000000030122
//谓词查询
double money;
for (Entry entry : entries) {
//遍历数据 因为上面我查的id是123456的数据 所以这里就一条实际情况大家根据需要整哈
zsonObject = ZSONObject.stringToZSON(entry.getValue().getString());
money+= zsonObject.getDouble("money");
}
//给组件赋值数据
Text moneyText= (Text) findComponentById(ResourceTable.Id_money_text)
moneyText.setText(money+ "");
鸿蒙的数据库声明和获取是一套代码 没有就创建 有就获取 在utils文件夹下创建DBUtils工具类
public class DBUtils { //具体的实现数据库的初始化 public static SingleKvStore initOrGetDB(Context context,String storeId){ //要做的是事情,定义数据库,设计数据库的表里有什么字段,这里就举例子 自己根据自己的项目写 FieldNode fdid = new FieldNode("id");//字段名 fdid.setNullable(false);//不能为空 fdid.setType(FieldValueType.STRING);//数据类型 FieldNode fdmoney = new FieldNode("money"); fdmoney.setType(FieldValueType.DOUBLE);//数据类型 FieldNode fdpaymentMatters = new FieldNode("paymentMatters"); fdpaymentMatters.setType(FieldValueType.STRING);//数据类型 FieldNode fddateYear = new FieldNode("dateYear"); fddateYear.setType(FieldValueType.INTEGER);//数据类型 FieldNode fdinOrExp = new FieldNode("inOrExp"); fdinOrExp.setType(FieldValueType.BOOLEAN);//数据类型 //把上面的字段,封装到Schema对象 Schema schema = new Schema(); //设置索引 ArrayList<String> indexList = new ArrayList<>(); indexList.add("$.id"); //schema默认有一个rootFieldNode schema.setIndexes(indexList); schema.getRootFieldNode().appendChild(fdid); schema.getRootFieldNode().appendChild(fdmoney); schema.getRootFieldNode().appendChild(fdpaymentMatters); schema.getRootFieldNode().appendChild(fddateYear); schema.getRootFieldNode().appendChild(fdinOrExp); schema.setSchemaMode(SchemaMode.STRICT);//严格模式 KvManagerConfig kvManagerConfig = new KvManagerConfig(context); KvManager kvManager = KvManagerFactory.getInstance().createKvManager(kvManagerConfig); //设置操作参数 Options options = new Options(); options.setCreateIfMissing(true)//是否默认创建 .setEncrypt(false)//是否默认加密 .setKvStoreType(KvStoreType.SINGLE_VERSION)//单版本类型 .setSchema(schema); SingleKvStore singleKvStore = kvManager.getKvStore(options, storeId); return singleKvStore; } }
setKvStoreType 有两种类型 单版本类型SINGLE_VERSION 和协同数据库DEVICE_COLLABORATION
分布式数据服务支持的KV数据模型规格:
(1)设备协同数据库,Key最大支持896Byte,Value最大支持4MB - 1Byte。
(2)单版本数据库,Key最大支持1KB,Value最大支持4MB - 1Byte。
(3)每个应用程序最多支持同时打开16个KvStore。
1、如果要改数据库字段,需要先关闭数据,删除数据库,再建新的数据库写入数据
2、更新Ui数据需要拿到主线程在任务Runnable中,向UI组件写值
getUITaskDispatcher().asyncDispatch(new Runnable() {
@Override
public void run() {
//在任务Runnable中,向UI组件写值
}
})
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。