是否曾经调用过 onUpgrade 方法?
2022-09-01 04:51:29
SQLiteOpenHelper
的onUpgrade
方法曾经被调用过吗?如果是这样,它何时被调用,由什么调用?如果它没有被开发人员调用,那么为什么它在那里?该函数到底发生了什么?我看过一些例子,它删除了所有的表,但后来有一条评论说,删除所有表不是你应该做的。有什么建议吗?
SQLiteOpenHelper
的onUpgrade
方法曾经被调用过吗?如果是这样,它何时被调用,由什么调用?如果它没有被开发人员调用,那么为什么它在那里?该函数到底发生了什么?我看过一些例子,它删除了所有的表,但后来有一条评论说,删除所有表不是你应该做的。有什么建议吗?
对于那些想知道被呼叫的确切时刻的人来说,它是在呼叫或.onUpgrade()
getReadableDatabase()
getWriteableDatabase()
对于那些不清楚它如何确保它被触发的人来说,答案是:当提供给构造函数的数据库版本更新时,它就会被触发。下面是一个示例SqLiteOpenHelper
public class dbSchemaHelper extends SQLiteOpenHelper {
private String sql;
private final String D_TAG = "FundExpense";
//update this to get onUpgrade() method of sqliteopenhelper class called
static final int DB_VERSION = 2;
static final String DB_NAME = "fundExpenseManager";
public dbSchemaHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
// TODO Auto-generated constructor stub
}
现在...onUpgrade()
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
sql = "ALTER TABLE " + fundExpenseSchema.Expense.TABLE_NAME + " ADD COLUMN " + fundExpenseSchema.Expense.FUNDID + " INTEGER";
arg0.execSQL(sql);
}
如果您使用的是 SQLiteOpenHelper,则每当您更改 DB 版本时,都会调用 onUpgrade。为此,还有一个额外的要求。数据库名称必须保持不变。
Old Version:
dbName = "mydb.db"
dbVersion = 1
New Version:
dbName = "mydb.db"
dbVersion = 2
在内容提供程序的 onCreate 中,您可以创建一个采用这些参数的 SQLiteOpenHelper 实例。您的 SQLiteOpenHelper 实现将如下所示:
public static final class MySQLiteOpenHelper extends SQLiteOpenHelper {
public MySQLiteOpenHelper(Context context, int dbVersion, String dbName) {
super(context, dbName, null, dbVersion);
}
@Override
public void onCreate(SQLiteDatabase db) {
//Code to create your db here
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Code to upgrade your db here
}
}