You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sqflite时DatabaseHelper的静态_db变量何时不为空?

sqflite DatabaseHelper 实现疑问解答

1. 应用每次启动时_db初始为null,会不会导致每次都新建表?

不会。
openDatabase的onCreate回调仅会在设备对应路径下的数据库文件(你代码里是todo.db)首次生成时触发。只要本地已经存在该数据库文件,且传入的版本号和数据库的当前版本号一致,哪怕每次启动都重新调用openDatabase,也只会打开已有的数据库文件,不会触发onCreate逻辑,更不会重复建表覆盖原有数据。

2. _db变量在什么情况下才会不为空?

有且仅有两种情况:

  • 应用进程存活期间,首次调用createDB()方法执行完成后,_db会被赋值为已成功打开的数据库实例,后续所有调用createDB()都会直接返回该实例,不会重复执行初始化逻辑。
  • 只要应用进程没有被销毁(用户没手动杀应用、系统没回收进程),_db就会一直保持非空状态,只有进程销毁后静态变量被回收,下次启动时才会回到初始的null状态。

补充优化建议

你当前的createDB方法命名可以调整为getDatabase更符合语义,因为该方法核心逻辑是优先复用已有的数据库实例,并非每次调用都会创建新的数据库。

内容的提问来源于stack exchange,提问作者Mariam Albarghouti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:09:03