【问题标题】:Should SQLite tables already be created when building/deploying Android app? [closed]在构建/部署 Android 应用程序时是否应该已经创建 SQLite 表? [关闭]
【发布时间】:2020-07-30 17:01:50
【问题描述】:

作为一个新手,我想知道这样做的正确方法是什么:我看过几个教程都创建了一个数据库,然后以一种只能在用户设备上运行的方式使用CREATE TABLE x IF NOT EXISTS

我试图找出这是否是“正确”的方法 - 以及为什么我们显然避免创建和部署一个包含所有预期表的精心设置的数据库 - 但到目前为止没有发现任何相关信息(可能是因为我仍然缺乏更好地搜索它的词汇......)。

在我看来,这可能会在用户的设备上引入不必要的错误,而我看不到任何优势!

期待您的见解!


编辑:

我已被指向用于数据库处理的 Room,我将对其进行研究!但是我的问题仍然没有答案。改写:
何时/何地创建数据库表(在构建之前/在构建期间/在用户设备上)?该决定背后的理由是什么?

【问题讨论】:

  • 您看到人们手动编写 Sqlite 语句的事实可能(不确定)意味着这些教程可能有点过时了。房间不再是真正的问题或问题。无论哪种方式,您的问题都没有真正的正确答案,如果这是绝对要求,那么它将被强制执行并且不是可选的
  • 是的,可能已经过时了——或者他们只是想让学生熟悉 SQLite。我去看看房间
  • 作为一个同时做过room和Sqlite的人来说,在我看来,教任何人Sqlite真的没有意义,当然,它会教你更多地欣赏Room,但与如何相比它是如此不同room works 知道它没有任何意义,它是一个完全不同的实现,但这完全是我的意见和对话
  • 是的,对于 Android,Room 可能是你现在所需要的,但 SQLite 也用于其他领域 - 所以我很高兴我知道了基础知识!

标签: android database sqlite


【解决方案1】:

对于 Android sqlite,规范的方法是使用 SQLiteOpenHelper 来管理数据库架构生命周期。应该首先创建表的帮助器onCreate() 在运行时首次打开数据库时被调用,例如getWritableDatabase()。详情请见When is SQLiteOpenHelper onCreate() / onUpgrade() run?

我认为IF NOT EXISTS 是一种代码味道。例如,SQLiteOpenHelper onCreate() 在每个数据库文件中最多调用一次,因此在正确的程序中不可能有任何预先存在的表开始。因此IF NOT EXISTS 只是隐藏了其他问题,直到很久以后才会发现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多