SQLite 良好实践和 ContentProvider

SQLite good practices & ContentProvider

目标

我想问几个关于 Android 应用解决方案实施的问题。

上下文

我们的应用程序有一个 SQlite 数据库。我们还使用 ContentProvider 轻松管理数据库数据的更改,并在发生更改时得到通知。

该应用程序有一个 Activity,其中包含一个 ViewPager 和 4 个 Fragment。这 4 个 Fragment 中有 2 个使用通用数据。

问题

假设我们存储了用户的信用卡数据。他可能有几张卡保存在数据库中,所以我们需要知道哪一张是 active.

我只能想到2个解决方案。

  1. 保存在 Preferences
  2. 在信用卡中添加一个活动字段table

第二种解决方案的示例:

╔════════════════╦═════════════╦═══════════════╦════════╗
║      name      ║     id      ║ secret_number ║ active ║
╠════════════════╬═════════════╬═══════════════╬════════╣
║ personal visa  ║ 02468024680 ║           659 ║ true   ║
║ company visa   ║ 13579135791 ║           362 ║ false  ║
╚════════════════╩═════════════╩═══════════════╩════════╝

我认为第二个更好,因为 ContentProvider 会在 active 卡更换时通知我们的 Fragments,他们将能够反映那一刻的变化。

问题

但是,我不确定这是否在 good practices 内,因为它可能会导致问题,例如将多行标记为 活动 。除此之外,我还想问一下是否有任何方法可以用一个 sql 语句更新所有行,我的意思是 active 一个并将其余设置为 .

提前致谢。

一旦我找到了一次更新所有行的方法,我就会去做。

我只需要使用 CASE WHEN ... THEN ... ELSE ... END 语句,我忘记它存在了!

找到了 here