android - 如何知道何时插入我的数据库?

标签 android database facebook sqlite sql-insert

我想弄清楚如何高效且有效地执行数据库操作。我有它,所以当用户登录时,我使用 Facebook API 并获取有关用户 friend 的详细信息并将它们放入我的数据库中。这是在名为 createFriend 的方法中完成的。但是,如果我第二次登录,就会出现错误,因为每个 friend 都有一个唯一的用户 ID。因此,如果我第二次登录,我的代码会再次调用 createFriend 方法并尝试插入我第一次登录时已经插入的同一个 friend ,我会遇到唯一列违规.

因此,我不知道什么时候应该调用createFriend 方法。我想到了 2 种解决方案来解决我的问题:

  1. 我查看了此链接,看看是否可以检查每一行,如果该行存在,然后我才进行插入。我发现:SQLiteDatabase: Insert only if the value does not exist (not via raw SQL command) .每次我想插入一个 friend 时检查该行是否存在,这似乎不是很有效,如果不存在,我不插入,否则我插入。我必须为用户拥有的每个 friend 执行此选择语句。

  2. 我想到的另一种方法是:我可以调用 Facebook API 并检查从 Facebook API 返回的好友数量是否等于本地数据库中的行数。如果是这样,我将跳过一起调用 createFriend。如果没有,我可以删除整个数据库并重新插入所有 friend 。但是,这似乎效果不佳,因为 Facebook API 有可能继续返回与我的数据库中相同数量的 friend ,但返回的 friend 可能与数据库中的不同。因此,数据库不会更新,因为 friend 的数量仍然相同,但我希望它更新,因为我想将那些潜在的新 friend 插入数据库。

任何人都可以指出我可以在哪里解决这个问题的正确方向吗?谢谢!

最佳答案

您可以更新重复键。

看看这个作为引用, SQLite UPSERT - ON DUPLICATE KEY UPDATE

关于android - 如何知道何时插入我的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853002/

相关文章:

java - 实现我自己的按钮监听器

android - Flutter Camera Plugin 导致条形码阅读器崩溃

android - 是否可以使用 robolectric 将 MediaStore 替换为测试替身?

database - flex 本地数据库 lastInsertId = 0

node.js - Passport -facebook-token 与 Passport -facebook

android - 如何在 github 上为 android-ffmpeg 项目构建最新的 ffmpeg

android - 数据库访问设计模式

php - 使用选择框获取数据库

ios - FBSession : No AppID provided; either pass an AppID to init, 或添加字符串值键

c# - Int32 的值太大或太小 - Facebook 和 dotnetopenauth