一种APP版本更新时数据库降级的用户数据保护方法与流程

文档序号:11199283阅读:430来源:国知局
本发明涉及用户数据保护
技术领域
:,具体说是一种app版本更新时数据库降级的用户数据保护方法。
背景技术
::在android系统中,内置有轻量级数据库sqlite,sqlite甚至不需要安装和启动服务进程,它只是一个后缀为.db的数据库文件,但它支持sql语句。关于sqlite的使用需要一个sqlitedatabase类,该类底层就是一个数据库文件,一个该类代表一个数据库,对数据库的操作也要通过sqlitedatabase类。sqlitedatabase类封装了一些操作数据库的api,使用该类可以完成对数据进行添加(create)、查询(retrieve)、更新(update)和删除(delete)操作。sqliteopenhelper类是一个用来辅助管理数据库创建和版本升级问题的抽象类。我们可以继承这个抽象类,实现它的一些方法来对数据库进行自定义操作。下面两个方法必须重写:publicvoidoncreate(sqlitedatabasedb)publicvoidonupgrade(sqlitedatabasedb,intoldversion,intnewversion)oncreate:调用时机是用户首次安装应用后启动,或是清除app数据库文件后启动。这时可以在这个函数中完成初始的数据表的创建。onupgrade:调用时机是用户在做应用更新,覆盖安装后启动,如果新版本中数据库版本号要比旧版本中的数据库版本号高则会调用。这时可以在这个函数中完成数据库版本升级带来的旧版本的兼容问题,以及数据迁移问题。用sqliteopenhelper类中的getwritabledatabase()和getreadabledatabase()方法可以获得数据库的引用。还有一个一般情况下不需要重写,但在应用出现逆向降级(如应用由版本号4降级安装版本号为3的包)时必须重写的方法ondowngrade,如果应用降级覆盖安装时没有重写该方法则会崩溃。另外sqliteopenhelper子类在构造实例时必须指定当前数据库的名称(name)、版本号(version)。而这里名称就决定了数据库存储时的文件名称,而这里的版本号与app在androidmainfest.xml定义的versioncode没有绝对关联。也就是在app更新时如果数据库的数据结构没有发生变化那么数据库的版本号则不用增加。数据库在做升级时我们能明确地知道当前我们要对各旧表进行什么样的操作来兼容新版本。但如果在数据库降级时,情况就不一样了。例如:开发版本2(相对于版本1这是一个新版本)时,我们不能明确地知道以后的新版本(比如版本3、版本4)的数据库结构走向是怎样的。这时,当用户从版本3回退到版本2,由于版本2在开发当时不能预知版本3的表结构,不知道版本3的数据表能否兼容到版本2(假如版本3升级时删除了一个版本2一直在用的表字段,这时回退数据结构可能就不兼容了)。因此,降级操作很可能导致用户数据的丢失,而这可能给用户带来不可弥补的损失,该问题显然需要加以解决,以避免影响用户的体验及用户数据的安全。另一种可能的情况是:有时候某app自动的进行了升级操作,但用户可能觉得还是老版本好用,因此还想换回老版本,但又想保留数据,不希望因为换回老版本导致数据受到损失。技术实现要素:针对现有技术中存在的缺陷,本发明的目的在于提供一种app版本更新时数据库降级的用户数据保护方法,应用简单,可有效保护用户数据,避免因为数据库降级导致的用户数据丢失问题。为达到以上目的,本发明采取的技术方案是:一种app版本更新时数据库降级的用户数据保护方法,其特征在于,包括如下步骤:步骤1,获取当前已安装好的数据库名及数据库版本号;步骤2,获取将要安装的数据库名及数据库版本号;步骤3,判断当前已安装好的数据库名和将要安装的数据库名是否相同;相同,则转步骤4;不同,则:记录步骤1和步骤2获取的数据,转相应的处理;步骤4,判断当前已安装好的数据库版本号和将要安装的数据库版本号的异同;相同,则数据库直接沿用,不对数据库进行更新操作;数据库升级,则:转步骤5;数据库降级,则:转步骤6;步骤5,数据库升级,采用以下方式进行数据迁移:步骤5.1,在数据库中创建对应于新版本的数据库的表,表的命名规则为:前缀_表名_后缀,其中后缀等于数据库版本号,步骤5.2,将对应于旧版本的数据库的表中的用户数据,采用复制的方式迁移到对应于新版本的数据库的表;步骤6,数据库降级,采用以下方式进行数据迁移:步骤6.1,获取对应于旧版本的数据库的表的数量及表的命名;步骤6.2,根据表的命名,逐一判断数据库中是否有该表,对没有的表进行创建,表的命名规则为:前缀_表名_后缀,其中后缀等于数据库版本号。在上述技术方案的基础上,app根据后缀,快速的判断出该表对应哪个版本的数据库。在上述技术方案的基础上,在表中存储每一笔数据时,记录该数据的创建时间;在表中更新每一笔数据时,记录该数据的更新时间;在数据库中存储数据库升级的日期及时间,在数据库中存储数据库降级的日期及时间。在上述技术方案的基础上,结合升级的日期及时间,判断出哪些数据是升级后的新数据,哪些数据是升级前的旧数据;结合降级的日期及时间,判断出哪些数据是降级后的新数据,哪些数据是降级前的旧数据。在上述技术方案的基础上,在获取用户数据时:方式一,根据当前已安装好的数据库版本号,将其作为后缀和表名按表的命名规则组合,得到当前版本表,直接从当前版本表中获取用户数据;方式二,判断是否有表名相同、后缀大于当前已安装好的数据库版本号的表存在,如有,则,该表为更新版本表,此时:进一步获取当前版本表中的表项名称,逐一在更新版本表中查询,有对应表项则读取其中记录的用户数据,无对应表项则返回一默认值作为用户数据;如无,则结束获取用户数据。在上述技术方案的基础上,利用升级的日期及时间或降级的日期及时间,对比当前时间,辅助判断是否有可能存在更新版本表。在上述技术方案的基础上,通过try/catch()来捕获异常,转相应处理。本发明所述的app版本更新时数据库降级的用户数据保护方法,应用简单,可有效保护用户数据,避免因为数据库降级导致的用户数据丢失问题。具体实施方式本发明所述的app版本更新时数据库降级的用户数据保护方法,包括如下步骤:步骤1,获取当前已安装好的数据库名及数据库版本号;例如:已经安装到手机当中的某app,其当前已安装好的数据库名及数据库版本号为:database_name="xx_crm.db";database_version=3;步骤2,获取将要安装的数据库名及数据库版本号;例如:步骤1举例时所述的该某app,需要重新安装,则该某app的安装包可能有以下情况出现,当然,还有可能存在其他情况,不属于本发明讨论范围;情况1:database_name="xx_crm.db";database_version=4;显然这是属于数据库升级的情况;情况2:database_name="xx_crm.db";database_version=2;显然这是属于数据库降级的情况;步骤3,判断当前已安装好的数据库名和将要安装的数据库名是否相同;相同,则转步骤4;不同,则:记录步骤1和步骤2获取的数据,转相应的处理;所述相应的处理可以根据实际需要设定,不属于本发明讨论范围;例如:可以简单给出报错提示,也可以终止该某app的安装包的安装过程,或进行相应的容错处理,等等;步骤4,判断当前已安装好的数据库版本号和将要安装的数据库版本号的异同;相同,则数据库直接沿用,不对数据库进行更新操作;数据库升级,则:转步骤5;数据库降级,则:转步骤6;步骤5,数据库升级,采用以下方式进行数据迁移:步骤5.1,在数据库中创建对应于新版本的数据库的表,表的命名规则为:前缀_表名_后缀,其中后缀等于数据库版本号,步骤5.2,将对应于旧版本的数据库的表中的用户数据,采用复制的方式迁移到对应于新版本的数据库的表;如此一来:数据库升级时,显然对应于新版本的数据库的表是不存在的,都需要进行创建,第一,对应于旧版本的数据库的表可以给予完整的保留,无需任何改动,因为后缀可以对表进行区别,这样对应于旧版本的数据库的表中的已有用户数据也得到了有效的保留;第二,采用复制的方式迁移数据,则对应于新版本的数据库的表完美的包含了原有的数据,后续的增删改查直接在对应于新版本的数据库的表中进行即可,一方面不会影响对应于旧版本的数据库的表中的用户数据,二方面对数据的增删改查不会产生不利影响;第三,虽然是复制的方式迁移数据,实际上也是对旧规格的用户数据进行了格式上的升级,使其符合新规格的用户数据的格式要求;例如:对应于旧版本的数据库的表,命名为“t_table_2”,其对应于数据库版本号为2的数据库;例如:对应于新版本的数据库的表,命名为“t_table_3”,其对应于数据库版本号为3的数据库;“t_table_2”表和“t_table_3”中,表的字段相同或有差异,但都是用于存储某类数据,例如:都是用于存储学生姓名、性别、年级、学号;显然,根据后缀,app也可以知晓该表适合于哪个版本的app使用;步骤6,数据库降级,采用以下方式进行数据迁移:步骤6.1,获取对应于旧版本的数据库的表的数量及表的命名;步骤6.2,根据表的命名,逐一判断数据库中是否有该表,对没有的表进行创建,表的命名规则为:前缀_表名_后缀,其中后缀等于数据库版本号;如此一来:第一,数据库降级时,对应于旧版本的数据库的表,有可能已存在,也可能已经被用户删除,则需要根据情况决定是否创建;第二,降级操作时,不将对应于新版本的数据库的表中的用户数据写入对应于旧版本的数据库的表,其一,升级后的数据库,表的字段或已经有所变化,用户数据写入对应于旧版本的数据库的表有可能反而导致数据丢失或混乱,既然其还保留在对应于新版本的数据库的表中,那就可以暂不处理;其二,一旦进行写入,可能对对应于旧版本的数据库的表中的用户数据产生不利,维持旧数据在对应于旧版本的数据库的表中、新数据在对应于新版本的数据库的表中,更有利于数据的整理、维护。降级操作主要考虑的是不存在的表应该重新创建,以避免旧版本的数据库因不完整而影响app的运行,同时,尽量避免新旧规格的用户数据混杂。上述表的命名规则中,后缀等于数据库版本号,则根据该后缀,可快速的判断出该表对应哪个版本的数据库,有利于数据的维护和处理,能有效提高处理效率。在上述技术方案的基础上,在表中存储每一笔数据时,记录该数据的创建时间;在表中更新每一笔数据时,记录该数据的更新时间;在数据库中存储数据库升级的日期及时间,在数据库中存储数据库降级的日期及时间。此方案的好处是:结合升级的日期及时间,可以判断出哪些数据是升级后的新数据,哪些数据是升级前的旧数据;结合降级的日期及时间,可以判断出哪些数据是降级后的新数据,哪些数据是降级前的旧数据。例如:第一次记录的数据,则创建时间等于更新时间等于第一次记录时间;有修改的数据,则创建时间不变,更新时间等于修改时间;通过时间节点的判断,可快速区分新旧数据,进而判断从哪个表中增删改数据为宜。在上述技术方案的基础上,在获取用户数据时:方式一,根据当前已安装好的数据库版本号,将其作为后缀和表名按表的命名规则组合,得到当前版本表,直接从当前版本表中获取用户数据;方式二,判断是否有表名相同、后缀大于当前已安装好的数据库版本号的表存在,如有,则,该表为更新版本表,此时:进一步获取当前版本表中的表项名称,逐一在更新版本表中查询,有对应表项则读取其中记录的用户数据,无对应表项则返回一默认值作为用户数据;如无,则结束获取用户数据。更进一步,利用升级的日期及时间或降级的日期及时间,对比当前时间,辅助判断是否有可能存在更新版本表。在上述技术方案的基础上,通过try/catch()来捕获异常,转相应处理。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1