Java 在从服务器数据更新表sqlite之前,是否应该先从表sqlite中删除数据?

Java 在从服务器数据更新表sqlite之前,是否应该先从表sqlite中删除数据?,java,android,android-sqlite,Java,Android,Android Sqlite,这是我第一次打开活动时在应用程序上执行的逻辑: 当主活动打开时,检查网络是否可用 若网络已连接,则从服务器获取数据,然后保存到sqlite。如果网络不可用,则显示toast警报用户需要连接网络 主活动逻辑第二次打开 检查网络是否可用 若网络已连接,则从服务器获取数据。现在我还想在sqlite上保存新数据,但sqlite数据现在包含旧数据。我应该先删除表中的所有旧数据,然后从服务器插入新数据吗?如果不删除并继续将新数据插入sqlite,表将重复数据,我如何解析 对不起,我的英语错了,问题重复了。我

这是我第一次打开活动时在应用程序上执行的逻辑:

  • 当主活动打开时,检查网络是否可用
  • 若网络已连接,则从服务器获取数据,然后保存到sqlite。如果网络不可用,则显示toast警报用户需要连接网络
  • 主活动逻辑第二次打开

  • 检查网络是否可用
  • 若网络已连接,则从服务器获取数据。现在我还想在sqlite上保存新数据,但sqlite数据现在包含旧数据。我应该先删除表中的所有旧数据,然后从服务器插入新数据吗?如果不删除并继续将新数据插入sqlite,表将重复数据,我如何解析

  • 对不起,我的英语错了,问题重复了。我正在寻找从服务器获取数据的最佳方法。如果有人给我一个如何处理的例子,我将非常感谢

    将数据作为来自服务器端的唯一主键。

    将数据作为来自服务器端的唯一主键。

    如果您处理的是一个小数据集(比如小于100个值),则您的方法相当简单且可接受

    但是,对于大型数据集,需要考虑建立一种同步机制,在这种机制中,只要求服务器具有本地数据和服务器上可用的数据的差异。 一种方法是保持同步键

  • 从服务器开始,服务器将为您提供一个密钥,例如包含所有数据的0
  • 在下一个请求中,您将向服务器发送此密钥0
  • 现在服务器将检查自0以来是否有任何更改
  • 如果是,它将用新的同步键(如1)向您发送增量更改(插入或更新)
  • 如果没有,它会说你是最新的

  • 在这种方法中,服务器必须维护更改历史记录,但对于移动客户端来说,它在数据库和网络方面是有效的。

    如果您处理的是一个小数据集(比如小于100个值),那么您的方法是相当简单和可接受的

    但是,对于大型数据集,需要考虑建立一种同步机制,在这种机制中,只要求服务器具有本地数据和服务器上可用的数据的差异。 一种方法是保持同步键

  • 从服务器开始,服务器将为您提供一个密钥,例如包含所有数据的0
  • 在下一个请求中,您将向服务器发送此密钥0
  • 现在服务器将检查自0以来是否有任何更改
  • 如果是,它将用新的同步键(如1)向您发送增量更改(插入或更新)
  • 如果没有,它会说你是最新的

  • 在这种方法中,服务器必须维护更改历史记录,但在数据库和网络方面,这对于移动客户端来说是有效的。

    您可以向表中添加
    主键
    ,并在从服务器获取数据时使用
    插入或替换
    SQL语句。@Titus:谢谢,但来自服务器的数据是JSON,并且没有id主键,所以我不知道需要替换哪些数据,需要插入的。您可以将
    JSON
    对象中任何假定为唯一的值用作
    主键
    ,也可以通过组合此对象中的多个值来创建唯一标识符。您可以将
    主键
    添加到表中,并在获取来自服务器的数据。@提图斯:谢谢,但来自服务器的数据是JSON,并且没有id主键,所以我不知道需要替换哪些数据,需要插入的。您可以将
    JSON
    对象中任何假定为唯一的值用作
    主键,也可以通过组合此对象中的多个值来创建唯一标识符。谢谢您的回答。你们能告诉我什么时候从服务器上取数据吗。我是在主活动的OnCreate()方法上做的,这是正确的方法吗?或者我需要一段时间的Intent服务在后台进行更新吗?这取决于您的用例:谢谢您的回答。你们能告诉我什么时候从服务器上取数据吗。我是在主活动的OnCreate()方法上做的,这是正确的方法吗?或者我是否需要由Intent Service在后台进行一段时间的更新?这取决于您的用例: