2012-01-03 60 views
3

当插入到sql数据库或者有更好的方法时,可以打很多“重复插入行”吗?可以重复故意在重复行上插入数据库吗?

我下载从我的服务器“意见”,并在我的Android手机上一个ListView显示他们..

这是我如何做到这一点:

1 - 每当我显示列表视图,我取通过从服务器的XML,去年15个评论..

2 - 我插入注释到本地SQL数据库在手机上

3 - 我用的是从本地加载数据适配器更新列表视图sql数据库。

每30秒,我重复步骤1,2和3。我也重复步骤1,2,3活动时碰到的onResume ...

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

这样好吗?我每30秒抛出10-15行这个异常。有没有更好的方式,不会伤害性能?我没有看到在插入前检查行是否存在,因为这肯定会慢一些。当我查询它时,我可能会传递一个变量给服务器,告诉它我的最新评论是什么。

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

感谢商榷..

+0

您是否考虑过检查您要提取的评论的唯一键? – 2012-01-03 14:51:55

回答

2

如果您的服务器的数据库有一个连续的,渐进的键,然后是的,我只想有一个附加条件查询“......与SeqIdField> [我的最后一个ID]”。如果没有记录返回,那么你只需重置你的计时器并等待再次查询。

即使没有顺序标识,但是您可以在特定日期/时间后插入记录,那么请确保日期/时间包含在结果中,并将最新的一个作为参数传回。如果你不想/需要在你的本地设备上存储该日期/时间,那么只需保存最新的某个地方,以便知道在应用再次运行时应该在哪里选择备份。

+0

目前,客户端正在请求来自服务器的最后15条评论 - 无论客户端是否已收到它们。这听起来像是你建议我要求客户端还没有的最后15条评论。我想我会继续前进并做出这种改变,因为如果没有别的,它会节省网络带宽。为什么一遍又一遍地向客户端推送相同的15条评论。干杯〜 – 2012-01-04 11:56:31

+0

好的,在这种情况下,您可能需要2个查询。首先,按照我的建议获取您还没有的一切。如果结果为15行或更多行,则不需要执行第二个查询。如果您得到的行数少于15行,请对比第一个查询中最后一条记录更早的一行执行另一个查询,并在“TOP n”关键字之前加上n =需要的行数。这将导致通过电线发送的记录的绝对数量最少。 – Wade 2012-01-05 15:44:29