SQLiteOpenHelper更新数据库中的表

时间:2012-10-31 08:14:23

标签: android

我有一个扩展SQLiteOpenHelper的类。重载的两个函数是

@Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase dataBase, int oldVersion,
            int newVersion) {

    }

在OnCreate函数中,我添加SQL脚本来创建表。现在如果我想升级数据库中的表怎么办?

何时调用onUpgrade函数?

oldVersion和newVersion int值是什么?

这些允许我在我的数据库上创建版本控制吗?

与版本2中一样,我想添加一个新表,在版本3中,我想在现有数据库表中添加一个新列?

我该怎么做?

每次创建类的对象时都会调用onCreate函数,还是Android会在安装应用程序时调用它?

2 个答案:

答案 0 :(得分:1)

  

oldVersionnewVersion int值是什么?

这些用于对数据库进行版本控制。数据库版本在SQLiteOpenHelper的构造函数中传递。

  

何时调用onUpgrade函数?

onUpgrade>时会调用

newVersion oldVersion

  

这些允许我在我的数据库上创建版本控制吗?

是的,这些值允许您对数据库进行版本化。

  

就像在版本2中一样,我想添加一个新表,在我想要的版本3中   将新列添加到现有数据库表中?

onUpgrade方法中执行CREATE TABLE查询,该查询将在数据库中创建新表。同样,如果要添加新列,请使用ALTER TABLE语句。

  

每次创建对象时都会调用onCreate函数   这个类,或Android只会在应用程序调用时调用它   设置?

如果您的应用程序尚未创建数据库,则会调用

OnCreate,例如 - 您是第一次启动应用程序,在清除数据后第一次运行应用程序。

答案 1 :(得分:0)

我给你一个剪切,这里我设置数据库版本为1.如果我需要升级所有数据库,我会使它2或其他东西和SQLiteOpenHelper将知道这是一个新版本的数据库,并调用onUpgrade方法......

private final int DATABASE_VERSION = 1;
private final String DATABASE_NAME = "yourDatabase";

private class DBOpenHelper extends SQLiteOpenHelper {

    public DBOpenHelper(Context context) {
        super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_SIGNIN_FIRST);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         // you can drop table and re create it here.
    }

}