2010-08-28 86 views
0

我有一个使用数据库的应用程序。在启动时,我检查我的表是否丢失,如果有的话,我创建它们。很棒。 我注意到,如果我“adb卸载”,那么下一次我运行我的应用程序时,表格会重新创建(这是我需要的),但通过市场更新时怎么办? 我正在发布更新,并且对表格进行了重大更改。如果表格被完全擦除并重新创建,我希望它,实际上我的应用程序需要这样的事情发生。如果有人更新并拥有旧表,那么会有一个关闭的力量。 有谁知道这种情况的具体情况?Android数据库是否完全删除并重新创建,然后更新应用程序?

我的表格仅用于查找,我不存储用户数据,所以我不在乎丢失更新数据。 当然,我知道一个选择是使用某种类型的“版本”表,并检查是否需要手动删除和创建,但我想知道是否需要这样做。 谢谢。

回答

4

在更新时,表格被单独保留。我假设你已经实现了一个SQLiteOpenHelper的子类来解释这一点。 Android能够处理版本更改的方式是在SQLiteOpenHelper类中使用onUpgrade。如果数据库版本比应用程序预期的版本旧,则从SQLiteOpenHelper的构造函数调用此方法。从onUpgrade内部您将放弃旧桌子并创建新桌子。

onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion){ 
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
      //we can change this to perform different behaviors 
      db.execSQL("DROP TABLE IF EXISTS "+MYDB.TABLE_NAME); 
      onCreate(db); 
} 

如果您使用的是新数据库版本,请注意Android告诉您的方式,这一点非常重要。

DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

那场DATABASE_VERSION使用,所以你应该使用一个静态最终成员INT作为您的数据库实现的一部分。

希望有帮助,如果您有任何疑问,请留下评论。

相关问题