android - 反复故意使重复行上的数据库插入失败是否可以?

标签 android sql

在插入到 sql 数据库时是否可以点击许多“插入时重复行”或者是否有更好的方法?

我正在从我的服务器下载“评论”并将它们显示在我的 android 手机上的 ListView 中..

这是我的做法:

1 - 每当我显示 ListView 时,我都会通过 xml 从服务器获取最后 15 条评论。

2 - 我将评论插入到手机上的本地 sql 数据库中

3 - 我使用从本地 sql 数据库加载数据的适配器更新 ListView 。

我每 30 秒重复第 1、2 和 3 步。当 Activity 点击 onResume 时,我也会重复第 1、2 和 3 步...

除非另一个 android 客户端上传了新评论,否则从服务器获取的所有评论都是重复的,将它们插入数据库会返回 SQLConstraintException,因为我不允许重复相同的评论。

这样可以吗?我每 30 秒抛出 10-15 行的异常。有没有更好的方法不会影响性能?我看不出在插入之前检查该行是否存在的意义,因为那肯定会更慢。我可能会在查询时向服务器传递一个变量,告诉它我最新的评论是什么。

我敢肯定很多人已经走到了这个十字路口。我们应该从这里去哪里?

感谢讨论..

最佳答案

如果你的服务器的数据库有一个顺序的、增量的键,那么是的,我会用一个附加条件“...AND SeqIdField > [my last id]”来查询。如果没有返回任何记录,那么您只需重置计时器并等待再次查询。

即使没有顺序 ID,但您可以在特定日期/时间之后插入记录,然后只需确保该日期/时间包含在您的结果中并将最新的作为参数传回。如果您不想/不需要将该日期/时间存储在您的本地设备上,那么只需将最新的日期/时间保存在某处,这样当您的应用再次运行时您就知道从哪里获取备份。

关于android - 反复故意使重复行上的数据库插入失败是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8713978/

相关文章:

MySQL "Order By"查询

sql - ms sql 存储过程返回数据没有输出

java - 如何使用Java将HTML文本存储在sql数据库中

java - 任务完成后返回

android - 在没有 OkHttp 的情况下改造公共(public) header ?

android - singleInstance Activity 的任务亲和性?

mysql - 关于优化多个联接的方法的建议。使用数据库触发器使用另一个表来编译数据是不好的做法吗?

android - onContextItemSelected 没有被调用

android - 错误 :Failed to resolve: wearable

MYSQL select查询使用count(*)