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

时间:2015-11-22 08:39:59

标签: android database facebook sqlite sql-insert

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

因此,我不知道何时应该调用createFriend方法。我想到了解决问题的两种解决方案:

  1. 我查看了这个链接,看看我是否可以检查每一行,如果该行存在,那么我才进行插入。我找到了:SQLiteDatabase: Insert only if the value does not exist (not via raw SQL command)。检查我想插入朋友的每一次,查看该行是否存在,如果没有,我不会插入,否则我会这样做。我必须为用户拥有的每个朋友做这个选择语句。

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

  3. 有谁能请我指出正确的方向,我可以解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以更新重复的密钥。

看看这个以供参考, SQLite UPSERT - ON DUPLICATE KEY UPDATE

答案 1 :(得分:0)

  

每次检查我想要插入一个朋友,查看该行是否存在似乎没有效率

你得出结论。

猜测可能是错的;在您实际测量之前,您不知道查询的速度有多快。

当你有一个UNIQUE约束时,数据库会搜索匹配的行无论如何,因此不会有任何额外的I / O. 无论如何,在考虑优化算法之前,请先使算法正确

如果您想忽略数据库中已存在的朋友,只需使用INSERT OR IGNORE