防止supite数据库onUpgrade丢失数据

时间:2013-01-13 20:29:56

标签: java android

现在我的onUpgrade方法如下所示:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS questions");
    onCreate(db);
}

每次我的应用程序从市场更新时,这都是一个新表。

如何阻止我的表被删除,只能在我想要的时候重新创建或修改?

3 个答案:

答案 0 :(得分:1)

您应该检查数据库版本。仅当当前版本比新版本旧时,才会执行onUpgrade()。每次都检查你的SQLiteOpenHelper构造函数的子类是否传递相同的参数(最后一个)。 在您的情况下,如果您的数据库版本保持不变,则不会重新创建数据库onUpgrade()将不会被执行。

public DBHelper(Context context) {
      super(context, DB_NAME, null, DB_VERSION);
}

答案 1 :(得分:1)

  

如何阻止我的表被删除,只能在我想要的时候重新创建或修改?

删除onUpgrade()方法的当前正文并执行更复杂的升级过程:添加表,删除表,更改表等。

答案 2 :(得分:0)

solution(葡萄牙语):

只需创建包含所有数据(备份)的临时表,删除/创建其他数据库表并将临时表数据复制(重新插入)到新结构。一种有效的解决方案,但可能并非在所有情况下都适用。