zoukankan      html  css  js  c++  java
  • 《第一行代码--Android》阅读笔记之数据持久化

    1.升级数据库

    为了避免手工清空数据(或卸载重装APP),重写SQLiteOpenHelper里面的onUpgrade()方法
     
    引用自http://blog.csdn.net/longvslove/article/details/7079954,作者longvslove

    Andoird的SQLiteOpenHelper类中有一个onUpgrade方法。帮助文档中只是说当数据库升级时该方法被触发。经过实践,解决了我一连串的疑问:

    1. 帮助文档里说的“数据库升级”是指什么?

    你开发了一个程序,当前是1.0版本。该程序用到了数据库。到1.1版本时,你在数据库的某个表中增加了一个字段。那么软件1.0版本用的数据库在软件1.1版本就要被升级了。

    2. 数据库升级应该注意什么?

    软件的1.0版本升级到1.1版本时,老的数据不能丢。那么在1.1版本的程序中就要有 地方能够检测出来新的软件版本与老的数据库不兼容,并且能够有办法把1.0软件的数据库升级到1.1软件能够使用的数据库。换句话说,要在1.0软件的数 据库的那个表中增加那个字段,并赋予这个字段默认值。

    3. 程序如何知道数据库需要升级?

    SQLiteOpenHelper类的构造函数有一个参数是int version,它的意思就是指数据库版本号。比如在软件1.0版本中,我们使用SQLiteOpenHelper访问数据库时,该参数为1,那么数据库版本号1就会写在我们的数据库中。

    到了1.1版本,我们的数据库需要发生变化,那么我们1.1版本的程序中就要使用一个大于1的整数来构造SQLiteOpenHelper类,用于访问新的数据库,比如2。

    当我们的1.1新程序读取1.0版本的老数据库时,就发现老数据库里存储的数据库版本是1,而我们新程序访问它时填的版本号为2,系统就知道数据库需要升级。

    4. 何时触发数据库升级?如何升级?

    当系统在构造SQLiteOpenHelper类的对象时,如果发现版本号不一样,就会自动调用onUpgrade函数,让你在这里对数据库进行升级。根据上述场景,在这个函数中把老版本数据库的相应表中增加字段,并给每条记录增加默认值即可。

    新版本号和老版本号都会作为onUpgrade函数的参数传进来,便于开发者知道数据库应该从哪个版本升级到哪个版本。

    升级完成后,数据库会自动存储最新的版本号为当前数据库版本号。
     
    存在的疑问:
    如果表结构变化比较大呢,这情况怎么处理,比如更换字段A类型和长度,在字段A和B之间插入字段C,这样该怎么处理,是丢弃原来的表重新建表吗?这样的话原表数据怎么升级到新表?
  • 相关阅读:
    装饰器的初识
    闭包
    匿名函数lambda
    内置函数Ⅱ
    Java生鲜电商平台-API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)
    Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)
    Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP)
    Java生鲜电商平台-生鲜电商小程序如何做好代码设计?(微信小程序/APP)
    Java生鲜电商平台-生鲜电商订单结算系统的深入解析与反思总结
    Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解
  • 原文地址:https://www.cnblogs.com/zyfdeblog/p/4725364.html
Copyright © 2011-2022 走看看