java - 是否曾经调用过 onUpgrade 方法?

标签 java android android-sqlite

onUpgrade SQLiteOpenHelper的方法|有没有打过电话?如果是这样,它是什么时候调用的,由什么调用?如果开发人员没有调用它,那为什么会在那里?该功能到底发生了什么?我已经看到了删除所有表格的示例,但是随后有评论说删除所有表格不是您应该做的。有什么建议么?

最佳答案

对于那些想知道调用 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);
}

关于java - 是否曾经调用过 onUpgrade 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163845/

相关文章:

android - 如何检测设备何时进入 Android N 的多窗口模式

java - 图像加载器 "SkImageDecoder::Factory returned null"

java - 如何修复未找到/损坏的表?

java - 如何解析正弦函数?

javascript - 在 NodeJS 中通过 USB 连接 Android/iPhone 设备

java - 无法从数据库获取上下文和访问架构

android - 应用程序因空光标而崩溃 - 内容提供商

java - 如何在最新的 Android Studio 3.2 中打开 Android Device Monitor

java - Multi-Tenancy 方法的 Apache Ignite 性能

java - 从两个相同的字符串中获取不同的哈希值