关于数据库迭代更新
来源:互联网 发布:股票软件的数据接口 编辑:程序博客网 时间:2024/05/21 21:18
App在进行版本更新的同时,我们可能需要对数据库版本进行相应的更新。接下来介绍数据库更新的一些方法:
方法来自郭大神的第一行代码。
public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table Book (" + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " + "name text)"; public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
OK,上面是第一版,只是简单的建了一张数据表。
第二版本我们需要新增一张Category表,于是
public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table Book (" + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " + "name text)"; public static final String CREATE_CATEGORY = "create table Category (" + "id integer primary key autoincrement, " + "category_name text, " + "category_code integer)"; public MyDatabaseHelper(Context context, String name,CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (oldVersion) { case 1: db.execSQL(CREATE_CATEGORY); default: } }}
上面代码的效果,如果客户第一次安装我们的程序,那么会执行onCreate中两个sql语句;如果客户是在第一版的基础上更新应用程序,那么应用程序会执行onUpgrade方法,如果之前的版本号是1,那么就会新增数据表。
ps:onCreate中的方法只会执行一次,所以必须依赖onUpgrade方法进行数据库的迭代
第三版,需要上面两个表建立关联关系,
public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table Book (" + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " + "name text, " + "category_id integer)";//新增的字段 public static final String CREATE_CATEGORY = "create table Category (" + "id integer primary key autoincrement, " + "category_name text, " + "category_code integer)"; public MyDatabaseHelper(Context context, String name,CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (oldVersion) { case 1: db.execSQL(CREATE_CATEGORY); case 2: db.execSQL("alter table Book add column category_id integer"); default: } }}
ok,如果新用户,会直接创建两张表;
如果是第一版的老用户,直接更新到第三版,那么会执行onUpgrade中的两个方法,先创建CREATE_CATEGORY表,然后修改Book表,这也是为什么case后面不加break的原因;
如果是第二版的老用户,会执行onUpgrade中的case 2
ok,这样我们就可以合理的管理数据库的迭代了!!!
0 0
- 关于数据库迭代更新
- 数据库更新迭代
- 关于博客笔记大汇总,持续更新迭代
- ZOJ2714迭代更新
- 版本更新迭代
- VIM 迭代更新
- LA2995(迭代更新)
- 项目的更新迭代
- 连接迭代数据库
- 关于牛顿迭代
- 关于迭代开发
- 连接数据库+迭代文件
- 数据库多维迭代算法
- php关于Iterator (迭代)
- php关于Iterator (迭代)
- 关于LoadRunner的迭代
- 关于php迭代循环
- 关于IN-LIST迭代
- hdu3555 Bomb
- 视频摘要与检索系统
- 合并排序的递归实现
- 再会鸟哥LINU
- Word 中添加目录的一般方法
- 关于数据库迭代更新
- hdu1863 畅通工程(判定最小生成树)
- HDU 1698 Just a Hook(线段树+lazy)
- Android 进阶
- 今天开始写博客
- linux下编译dcmtk的Android版本
- 杭电1106 排序
- [算法] 阿尔法-贝塔剪枝原理简单说明
- Android adb 发送广播、启动Activity、Service等