0

我有一个扩展 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 只会在安装应用程序时调用它?

4

2 回答 2

1

oldVersionnewVersionint 值是什么?

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

什么时候onUpgrade调用函数?

onUpgrade当你newVersion>oldVersion

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

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

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

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

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

OnCreate如果您的应用程序尚未创建数据库,则会调用它,例如 - 您第一次启动您的应用程序,在清除其数据后第一次运行该应用程序。

于 2012-10-31T08:32:51.957 回答
0

I give you a snipped, here i set database version to 1. And if i need to upgrade all database, i'll make it 2 or something else and SQLiteOpenHelper will know that this is a new version of database, and call onUpgrade method...

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.
    }

}
于 2012-10-31T08:20:15.497 回答