关于HarmonyOS 鸿蒙Next RdbStore的操作的一些疑问

发布于 1周前 作者 songsunli 来自 鸿蒙OS

关于HarmonyOS 鸿蒙Next RdbStore的操作的一些疑问

关系型数据库文档有如下描述:
1、“为保证数据的准确性,数据库同一时间只能支持一个写操作”
2、“数据库中有4个读连接和1个写连接,线程获取到空闲读连接时,即可进行读取操作。当没有空闲读连接且有空闲写连接时,会将写连接当做读连接来使用”

相关问题:

1、RDB框架内部做了安全同步同步吗?是否支持多线程写操作?还是需要开发者自己考虑同步操作?

2、如果不支持多线程写入,鸿蒙上有没有类似java synchronized 同步锁的一些方案?

3、普通的写、查、删操作,比如query、delete、insert等API内部是否实现了事务?是否还需要开发者自己实现?

2 回复
1. RdbStore中有安全同步,支持多线程写,因为只有一个写链接,所以在同时有多个写操作时,只会有一个写操作写入,其他写操作需要等待写链接空闲时才能写入:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-local-database-management-16-V5

2. 可以在调用的异步方法前面加上await将方法转为同步:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/concurrency-overview-V5

3. 可以通过beginTransaction开启事务:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-data-relationalstore-V5#begintransaction

4. arkts是线程隔离的,并不存在线程锁,rdb底层基于sqlite,应用使用时c++层会单独创建线程,c++存在线程锁

支持多线程写操作,在多线程中,RDB在同一时间只支持一个写操作,只有存在空闲的写链接才能继续进行写操作,用这样的限制来保证数据存储的正确性

关于HarmonyOS 鸿蒙Next RdbStore的操作疑问,以下是一些专业解答:

  1. 数据库初始化:应用创建的数据库与其上下文(Context)紧密相关,即使数据库名称相同,不同的上下文也可能导致创建不同的数据库实例。因此,在调用getRdbStore时,请确保传入了正确的上下文。
  2. 数据库配置:包括数据库名称、安全级别等配置信息,这些将影响数据库的创建和初始化。特别是安全级别,它决定了数据库文件的加密方式和安全性。
  3. 数据库操作:获取RdbStore实例后,可进行数据库的增、删、改、查等操作。请确保在数据库操作前,RdbStore实例已成功获取并处于可用状态。
  4. RdbStore状态判断:在HarmonyOS鸿蒙Next中,通常不需要专门的API来判断RdbStore是否处于打开状态。如果getRdbStore方法执行成功并返回了RdbStore对象,那么这个对象就是可用的,即处于“打开”状态。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部