注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

是缘是情是童真

如果你用笑脸面对 你会看见别人的笑脸

 
 
 

日志

 
 

SQLiteOpenHelper类与自动升级数据库  

2011-09-30 17:32:16|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android系统中使用的是SQLite数据库。虽然在Android中操作SQLite并不复杂,但在使用过程中仍然会遇到这样或那样的问题。例如,如何将一个ListViewGallery组件与SQLite数据库中的某个表进行绑定;如果程序发布时需要带一些初始数据,那么如何将数据库与应用程序一起发布呢?是否可以打开任意路径下的数据库文件。这些都是AndroidSQLite的初学者经常会遇到的问题。


    android.database.sqlite.SQLiteDatabaseAndroid SDK中操作数据库的核心类之一。使用SQLiteDatabase可以打开数据库,也可以对数据库进行操作。然而,为了数据库升级的需要以及使用更方便,往往使用SQLiteOpenHelper的子类来完成创建、打开数据库及各种数据库的操作。
    SQLiteOpenHelper是一个抽象类,在该类中有如下两个抽象方法,因此,SQLiteOpenHelper的子类必须实现这两个方法。
public abstract void onCreate(SQLiteDatabase db);
public abstract void onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion);
SQLiteOpenHelper会自动检测数据库文件是否存在。如果数据库文件存在,会打开这个数据库,在这种情况下,并不会调用onCreate方法。如果数据库文件不存在,SQLiteOpenHelper首先会创建一个数据库文件,然后打开这个数据库,最后会调用onCreate方法。因此,onCreate方法一般被用来在新创建的数据库中建立表、视图等数据库组件。也就是说,onCreate方法在数据库文件第一次被创建时调用。
    让我们先看看SQLiteOpenHelper类的构造方法再解释onUpgrade方法何时会被调用。
public SQLiteOpenHelper(Context context, Stringname, CursorFactory factory, int version);
    其中name参数表示数据库文件名(不包含文件路径),SQLiteOpenHelper会根据这个文件名创建数据库文件。version表示数据库的版本号。如果当前传递的数据库版本号比上次创建或升级的数据库版本号高。SQLiteOpenHelper就会调用onUpgrade方法。也就是说,当数据库第1次创建时会有一个初始的版本号。当需要对数据库中表、视图等组件升级时可以增大版本号。这时SQLiteOpenHelper会调用onUpgrade方法。当调用完onUpgrade方法后,系统会更新数据库的版本号。这个当前的版本号就是通过SQLiteOpenHelper类的最后一个参数version传入SQLiteOpenHelper对象的。因此,在onUpgrade方法中一般会首先删除要升级的表、视图等组件,再重新创建它们。也许很多读者看到这还是比较模糊,不知如何应用SQLiteOpenHelper来操作数据库,不过这不要紧。本章的实例39将详细演示SQLiteOpenHelper类的使用方法。下面来总结一下onCreateonUpgrade方法的调用过程。


  • 如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后只会调用onCreate方法,在该方法中一般需要创建数据库中的表、视图等组件。在创建之前,数据库是空的,因此,不需要先删除数据库中相关的组件。

  • 如果数据库文件存在,并且当前的版本号高于上次创建或升级时的版本号,SQLiteOpenHelper会调用onUpgrade方法,调用该方法后,会更新数据库版本号。在onUpgrade方法中除了创建表、视图等组件外,还需要首先删除这些相关的组件,因此,在调用onUpgrade方法之前,数据库是存在的,里面还有很多数据库组件。

  • 综合上述两点,可以得出一个结论。如果数据库文件不存在,只有onCreate方法被调用(该方法只会在创建数据库时被调用1次)。如果数据库文件存在,并且当前版本较高,会调用onUpgrade方法来升级数据库,并更新版本号。
  评论这张
 
阅读(907)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017