HarmonyOS 鸿蒙Next 为啥数据库初始化很慢,每次加载进去都是没数据
HarmonyOS 鸿蒙Next 为啥数据库初始化很慢,每次加载进去都是没数据
01-01 15:21:05.910 9512-9512 A03d00/JSAPP pid-9512 I onWindowStageCreate开始加载数据库。。。。。。
01-01 15:21:05.910 9512-9512 A03d00/JSAPP pid-9512 I initRdbStore begin
01-01 15:21:05.913 9512-9512 A03d00/JSAPP pid-9512 I onWindowStageCreate 查询数据长度。。。。。。0
01-01 15:21:05.914 9512-9512 A03d00/JSAPP pid-9512 I onWindowStageCreate loginModels。没数据。。。。。
01-01 15:21:05.938 9512-9512 A00000/testTag pid-9512 I Ability onForeground
01-01 15:21:06.020 9512-9512 A00000/testTag pid-9512 I Succeeded in loading the content.
01-01 15:21:06.123 9512-9512 A03d00/JSAPP pid-9512 I initRdbStore succeed
01-01 15:21:06.123 9512-9512 A03d00/JSAPP pid-9512 I createLoginTable begin
01-01 15:21:06.135 9512-9512 A03d00/JSAPP pid-9512 I createLoginTable succeed
01-01 15:21:06.919 9512-9512 A03d00/JSAPP com.example.pb I onWindowStageCreate 查询数据–…:[{“id":1,“password”:“123456”,“mail”:"qwer@qq.com”,“date”:“2025年01月01日 15:01:58”}]
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, ‘testTag’, ‘%{public}s’, ‘Ability onWindowStageCreate’);
//加载数据库
console.log(‘onWindowStageCreate开始加载数据库。。。。。。’)
this.initDatabase(this.context)
console.log(‘onWindowStageCreate 查询数据长度。。。。。。’+this.loginModels.length)
if (this.loginModels.length !== 0){
console.log(‘onWindowStageCreate loginModels。有数据。。。。。’+this.loginModels.length)
windowStage.loadContent(‘pages/LoginPage’, (err) => {
if (err.code) {
hilog.error(0x0000, ‘testTag’, ‘Failed to load the content. Cause: %{public}s’, JSON.stringify(err) ?? ‘’);
return;
}
hilog.info(0x0000, ‘testTag’, ‘Succeeded in loading the content.’);
});
}else{
console.log(‘onWindowStageCreate loginModels。没数据。。。。。’)
windowStage.loadContent(‘pages/RegisterPage’, (err) => {
if (err.code) {
hilog.error(0x0000, ‘testTag’, ‘Failed to load the content. Cause: %{public}s’, JSON.stringify(err) ?? ‘’);
return;
}
hilog.info(0x0000, ‘testTag’, ‘Succeeded in loading the content.’);
});
}
}
更多关于HarmonyOS 鸿蒙Next 为啥数据库初始化很慢,每次加载进去都是没数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好!
请您提供下
1、使用SDK版本及IDE版本信息;
SDK版本可以再IDE的File->Settings->OpenHarmony SDK中查看到,例如:5.0.0.71
IDE版本可以在Help->About DevEco Studio中查看到,例如:Build Version: 5.0.5.306
2、请您复现该问题后,打包日志;
例如,在DevEco软件右下角Device File Browser:data/log下导出整个hilog文件夹;
我们来具体分析下!谢谢
更多关于HarmonyOS 鸿蒙Next 为啥数据库初始化很慢,每次加载进去都是没数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
this.initDatabase(this.context)方法定义呢?
public async initRdbStore(context: Context){ console.info(‘initRdbStore begin’); if(!context){ console.error(‘initRdbStore context is invalid’) return } if(this.rdbStore){ console.error(‘rdbStore is exist’) return }
const STORE_CONFIG: relationalStore.StoreConfig = {
name: LoginDBUtils.DB_NAME, // 数据库文件名
securityLevel: relationalStore.SecurityLevel.S1, // 数据库安全级别
encrypt: false, // 可选参数,指定数据库是否加密,默认不加密
isReadOnly: false // 可选参数,指定数据库是否以只读方式打开。该参数默认为false,表示数据库可读可写。该参数为true时,只允许从数据库读取数据,不允许对数据库进行写操作,否则会返回错误码801。
}
try{
this.rdbStore = await relationalStore.getRdbStore(context,STORE_CONFIG)
console.info('initRdbStore succeed')
await this.createLoginTable()
}catch (err){
console.info('initRdbStore failed'+err)
}
}
private async createLoginTable(){
const sql = CREATE TABLE IF NOT EXISTS ${LoginDBUtils.Login_NAME} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, PASSWORD TEXT NOT NULL, MAIL TEXT NOT NULL, DATE TEXT NOT NULL )
;
console.info(‘createLoginTable begin’)
try{
if(this.rdbStore != undefined){
await this.rdbStore.executeSql(sql)
console.info(‘createLoginTable succeed’)
}
}catch (e){
console.error('createLoginTable failed : '+e)
}
}
你是不是忽略了这个initRdbStore是个异步执行的方法,this.initDatabase(this.context) console.log(‘onWindowStageCreate 查询数据长度。。。。。。’+this.loginModels.length) 当this.initDatabase(this.context)这一句调用之后没有等在那里,而是直接向下执行了。所以在执行后面的语句时Database并没有完成初始化,所以打印出【onWindowStageCreate 查询数据长度。。。。。。0】和【onWindowStageCreate loginModels。没数据。。。。。】你可以把initRdbStore改成同步执行方法。
同步试了下一样的。。。。
HarmonyOS 鸿蒙Next数据库初始化慢的原因可能涉及多个方面:
-
系统资源分配:在初始化过程中,系统需要为数据库分配必要的内存、存储等资源。如果系统资源紧张,如内存不足或存储I/O性能不佳,会导致初始化速度变慢。
-
数据库文件检查:为确保数据库文件的完整性和一致性,系统在初始化时会进行一系列的检查操作。这些检查操作,特别是针对大型数据库,可能会消耗较长时间。
-
索引重建:如果数据库在上次使用后进行了更新或修复,系统可能需要重建索引,以确保查询性能。索引重建是一个资源密集型任务,会影响初始化速度。
-
数据加载策略:鸿蒙Next的数据库可能采用了特定的数据加载策略,如延迟加载或按需加载。这些策略在初始化时可能不会立即加载所有数据,导致用户感知到“没数据”的现象。
-
版本更新:如果鸿蒙Next系统或数据库组件进行了版本更新,新版本的初始化流程可能引入了额外的步骤或优化,从而影响初始化速度。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html