android - 构建/部署 Android 应用程序时是否应该已经创建 SQLite 表?
问题描述
作为一个新手,我想知道这样做的正确方法是什么:我看过几个教程都创建了一个数据库,然后CREATE TABLE x IF NOT EXISTS
以一种只能在用户设备上运行的方式使用。
我试图找出这是否是“正确”的方法 - 以及为什么我们显然避免创建和部署一个包含所有预期表的良好设置的数据库 - 但到目前为止没有发现任何相关的(可能是因为我仍然缺乏词汇以更好地搜索它...)。
在我看来,这可能会在用户设备上引入不必要的错误,而我看不到任何优势!
期待你的见解!
编辑:
我已被指向用于数据库处理的Room,我将对其进行研究!但是我的问题仍然没有答案。改写:
何时/在何处创建 db 表(在构建之前/在构建期间/在用户设备上)?这个决定背后的原因是什么?
解决方案
使用 Android sqlite 的规范方法是用于SQLiteOpenHelper
管理数据库模式生命周期。应该首先创建表的助手onCreate()
在运行时第一次打开数据库时被调用,例如getWritableDatabase()
. 请参阅SQLiteOpenHelper onCreate() / onUpgrade() 何时运行?更多细节。
我认为IF NOT EXISTS
代码气味。例如,SQLiteOpenHelper
onCreate()
每个数据库文件最多调用一次 with,因此在正确的程序中不可能有任何预先存在的表开始。因此IF NOT EXISTS
只会隐藏其他问题,直到很久以后才会发现。
推荐阅读
- javascript - 在突出显示的元素上添加类?
- spring-boot - Springbook 2.0 拦截器转发到控制器
- webrtc - WebRTC 客户端会与仅支持通道而不支持数据/发送机制的 TURN 服务器一起使用吗?
- azure - ARM 模板部署的函数应用没有主机密钥并引发错误
- go - 由 go-side 服务器关闭的 gRPC 套接字
- javascript - 列表项上存在关键道具,但仍收到关键警告
- c# - Newtonsoft.Json 反序列化不会覆盖构造函数中设置的属性
- excel - 在所有打开的 Excel 文件中运行宏
- opengl - 如何知道我们何时在片段着色器中有纹理
- video - xf86-video-armsoc添加xorg驱动的问题