如果可以更改表,则添加类型为TIMESTAMP的新列'modified_time'。每当更新行时更新此列。 现在,当你想知道哪些行被更新时,运行这个SQL查询: select _id from table2 where modified_time = (select max(modified_time) from table2) 这个查询的结果给出了最近更新的所有行的id。
**编辑:**正如您在评论中提到的“……server pushes the data to table with changed values.i need the update values and update to other table",最好的选择是在数据库中创建一个触发器,它会根据第一个表的更新来更新第二个表。这就是方法。
3条答案
按热度按时间qvsjd97n1#
如果可以更改表,则添加类型为TIMESTAMP的新列'modified_time'。每当更新行时更新此列。
现在,当你想知道哪些行被更新时,运行这个SQL查询:
select _id from table2 where modified_time = (select max(modified_time) from table2)
这个查询的结果给出了最近更新的所有行的id。
**编辑:**正如您在评论中提到的“……server pushes the data to table with changed values.i need the update values and update to other table",最好的选择是在数据库中创建一个触发器,它会根据第一个表的更新来更新第二个表。这就是方法。
假设服务器将数据推送到'table 1',您希望监视更新的行。创建另一个table 2(或使用现有的),它将自动更新。
现在,创建一个触发器,如下所示:
当然,您的table 2会有所不同,但是您可以使用trigger自动插入或更新table 2中的行。您可以参考这些SO帖子以了解更多详细信息:
Does sqlite3 support a trigger to automatically update an 'updated_on' datetime field?
Using SQLite Trigger to update "LastModified" field
**示例应用:**我创建了一个示例应用,根据您描述的场景演示了Trigger在Android应用中的使用。您可以在这里下载Eclipse项目-trigger_example_eclipse_project.zip
简而言之,示例应用程序有一个 product 表,用于接收产品价格的更新。因此,我们创建另一个 updates 表,它将通过触发器根据 product 表上的更新自动更新。
通过EditText字段和Button,有一个UI来模拟 product Table上的更新。为了显示最近的更新,我们有一个ListView,它使用Cursor从 updates Table中获取数据。
下面是一些来自www.example.com的相关代码片段DbHelper.java
h5qlskok2#
您可以保留一个像LAST_UPDATE_TIME这样的列,在更新时使用当前时间进行更新。
然后,您可以只查询LAST_UPDATE_TIME >所需时间的所有行。
如果你不能改变表,你能用相同的列创建一个新表吗?然后,您可以在两个表中进行更新,并在需要时从新表中获取值,并在完成后仅从新表中删除它们。
mbskvtky3#
如果您正确地实现了ContentProvider,则插入或更新可以返回行的id。
这有点复杂,但看看Google的IOSchedule应用程序,查看Provider和Contract类,查看Contracts中的Room类以及插入或更新方法中Provider中的“Room”案例。
您将看到将返回一个Uri,在这种设计方法中,最后一个元素(最后一个斜杠之后)是插入/更新行的id。
我认为这种方法可以帮助你,而且你可以理解谷歌的源代码来完成你的工作(我发现它有点难以理解)