- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个使用 SQLite 数据库的应用程序。当应用更新时,它会完全覆盖数据库。
当我想将用户当前的进度转移到新的更新时,问题就出现了。数据库表包含问题行。每行包含 1 个问题、答案、正确答案的原因、用户是否已回答以及用户是否回答正确。
在更新中,可以删除一个问题和/或添加其他问题。唯一需要保留的数据是是否已回答问题并且回答正确。除了将旧数据库的每一行中的唯一数字或字符串与新数据库进行比较之外,是否有更好的方法来传输数据?
如果超过 100 行,这似乎会占用大量资源。尽管我看不到解决此问题的另一种方法。
如有任何建议和帮助,我们将不胜感激。
最佳答案
首先给每个表分配一个唯一的id——主键(PK)
问题表——与User的多对一关系
答题表-与Question一对一关系
用户表-与Question的一对多关系
Question+--------------+------------+------------------+| int | Id | PK || varchar(max) | question | || int | userId | FK (Foreign Key) || bool | answered | || bool | correct | |+--------------+------------+------------------+Answer+--------------+------------+----+| int | Id | PK || int | questionId | FK || varchar(max) | reason | |+--------------+------------+----+User+---------------+-------------+--------------------------------------------+| int | Id | PK || varchar (250) | deviceToken | (UUiD) // some unique identifier per phone |+---------------+-------------+--------------------------------------------+// other relevant stuff
下载应用程序后,用户可以使用设备 UUID 静默注册。中央数据库将需要跟踪这些以及已回答的问题,而不是将其全部清除并重新开始。 100 行并不多,但用户可能会遇到 1000 行或更多行。在更新中,重新填充手机中的本地数据库可能很慢是无关紧要的(尽管这么多行不一定很慢,但具有数百万行的数据库将需要时间),因为预计更新需要时间。
如果用户更换设备,则此信息不会传输到新设备。每个设备都被视为一个新用户。我发现如果您不希望人们注册但希望在更新期间保留数据,或者如果在一台设备上卸载并重新安装该应用程序,我发现这很有效。它和要求人们注册一样有其局限性。如果用户想使用同一台设备重新开始游戏,您始终可以提供一个选项“重置统计信息”,然后删除该数据。
Shared preferences 也可以用来保存用户对app的设置,我觉得一百个问题可能有点大材小用,把这些信息存储在SQLite数据库中比较合适;信息保存在服务器上。您不能在每次有更新时都删除数据,您必须保留消费者进度的当前记录。您不能依赖消费者的设备来保留信息。如果您想跟踪任何信息,您必须对此负责。
这可以存储在手机本地并定期与服务器同步。
在我们的应用程序中,我们就是这样做的,数据在更新后仍然存在,我们有数百万行。随意提出更多问题,但是提供一个实际教程(或代码)来说明这一切是如何工作的是 Stack Overflow 的一个有点宽泛的答案。
关于java - Android如何更新,但保留数据库信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8195283/
我是一名优秀的程序员,十分优秀!