1# 数据管理开发常见问题
2
3
4## 关系型数据库rdb中如何进行加密(API 9)
5
6**解决措施**
7
8创建关系型数据库,可通过StoreConfig管理关系型数据库配置,其中encrypt属性指定数据库是否加密。
9
10**参考链接**
11
12[关系型数据库](../reference/apis-arkdata/js-apis-data-relationalStore.md#storeconfig)
13
14
15## 关系型数据库rdb中使用TRUNCATE TABLE语句无法清空表数据(API 9)
16
17**问题现象**
18
19通过TRUNCATE TABLE语句清空表数据时报错。
20
21**解决措施**
22
23关系型数据库rdb使用Sqlite数据库, 它不支持 TRUNCATE TABLE 语句,建议使用delete语句,如:DELETE FROM sqlite_sequence WHERE name = 'table_name' ,另外发生该错误会抛出空异常。
24
25
26## 关系型数据库rdb支持哪些数据类型(API 9)
27
28适用于Stage模型。
29
30**解决措施**
31
32关系型数据库rdb支持的数据类型有:number、string、boolean。其中number为数字类型,支持Double,Long,Float,Int,Int64,最大精度为十进制17位数字。
33
34
35## 如何实现应用数据持久化存储(API 9)
36
37**解决措施**
38
39通过PersistentStorage类实现管理应用持久化数据,可以将特定标记的持久化数据链接到AppStorage中,并由AppStorage接口访问对应持久化数据。PersistentStorage持久化后的数据会生成本地xml文件保存,文件路径为/data/app/el2/100/base/<bundleName>/haps/<hapName>/files/persistent_storage40
41示例:
42
43```
44AppStorage.Link('varA')
45PersistentStorage.PersistProp("varA", "111");
46@Entry
47@Component
48struct Index {
49  @StorageLink('varA') varA: string = ''
50  build() {
51    Column() {
52      Text('varA: ' + this.varA).fontSize(20)
53      Button('Set').width(100).height(100).onClick(() => {
54        this.varA += '333'
55      })
56    }
57    .width('100%')
58    .height('100%')
59  }
60}
61```
62
63**参考链接**
64
65[持久化数据管理\(OpenHarmony\)](../quick-start/arkts-persiststorage.md)
66
67
68## 如何将PixelMap的数据存储到数据库中(API 9)
69
70**解决措施**
71
72PixelMap应该被转换成相应的ArrayBuffer再放进数据库。
73
74**参考链接**
75
76[readPixelsToBuffer](../reference/apis-image-kit/js-apis-image.md#readpixelstobuffer7-1)
77
78
79## 如何获取rdb关系型数据库文件(API 9)
80
81**问题现象**
82
83关系型数据库的获取问题
84
85**解决措施**
86
87开发者可使用hdc命令拷贝文件,其中文件路径为: /data/app/el2/100/database/包名/entry/rdb/ ,然后拷贝该路径下的文件,拷贝完成后,可以通过SQLite工具打开该数据库文件。
88
89示例:
90
91```
92 hdc file recv /data/app/el2/100/database/<bundleName>/entry/db/<tableName>  ./<path>
93```
94
95
96## 数据库在系统层面是否有锁机制,开发过程中是否需要关系数据库加锁问题(API 9)
97
98**问题现象**
99
100关系型数据库的加锁疑问
101
102**解决措施**
103
104系统提供的分布式数据服务、关系型数据库和首选项均有锁机制,开发者无需关注。
105
106
107## 在\@ohos.data.storage轻量级存储中,调用put方法保存数据后,再重启应用后调用get方法为什么无法获取到保存的值(API 9)
108
109**问题现象**
110
111关系型数据库的保存以及重启时的调用
112
113**解决措施**
114
115在storage轻量级存储中,调用put方法,只是将数据保存在内存中,并不会持久化到硬盘中,在退出应用后会将内存中的数据清空。如果想持久化到硬盘中,则在调用put方法后需要再调用flush或flushSync接口才行。数据持久化后重启应用时就可以通过get方法获取到之前保存的数据。
116
117
118## rdb关系型数据库中TEXT类型保存超长文本失败(API 9)
119
120**问题现象**
121
122API8版本rdb关系型数据库中TEXT类型保存超长文本失败
123
124**解决措施**
125
126API9版本之前对TEXT文本存储长度限制在1024字节,所以会存在超长文本保存失败的情况。
127
128在API9的版本中已经放开了长度限制。
129
130
131## Preferences.put缓存成功,但get的结果一直是undefined(API 9)
132
133**问题现象**
134
135使用首选项保存数据成功,但是获取数据为空。
136
137**解决措施**
138
1391. 使用put操作后,使用flush持久化数据,然后再使用get获取数据。
140
1412. 由于flush操作是异步执行,将Storage实例通过异步线程回写入文件中, 所以需要等待flush操作执行完成后,再执行get操作。
142
143
144## 使用RDB数据库时,能否指定内存数据库模式(API 9)
145
146**解决措施**
147
148RDB数据库底层使用的是SQLite,默认的内存数据库模式是文件,不支持修改。
149
150
151## 关系型数据库rdb中,如何获取数据库大小
152
153**解决措施**
154
155可以使用[execute](../reference/apis-arkdata/js-apis-data-relationalStore.md#execute12)接口执行sql语句获取数据库大小,如:SELECT page_count * page_size AS size FROM pragma_page_count(), pragma_page_size()。
156关系型数据库使用的是WAL模式,在查询前可以执行sql语句触发一次checkpoint刷新数据库文件大小,如:PRAGMA wal_checkpoint()。
157
158
159## 如何获取rdb关系型数据库路径
160
161**解决措施**
162
1631. 如果用户拥有root权限,则可以使用命令:"find /data -name 数据库名字"进行查找;
164
1652. 可以通过DevEco Studio的File Browser查找数据库文件路径。