我如何知道何时更新数据库 - Android

时间:2011-04-23 16:16:41

标签: java android sqlite

喂 我正在构建一个包含数据库的Android应用程序。 我的问题是如何知道应用程序是否已更新? 我的意思是,我知道在来自 -

的DATABASE_VERSION时会调用onUpgrade方法
public DataBaseHelper(Context context) {        
    super(context, DB_NAME, null, DATABASE_VERSION);
    this.myContext = context;
}

低于应用版本,但如何在更新后递增,因此应用不会一直自行更新?

2 个答案:

答案 0 :(得分:6)

您无需记录版本号。在调用onUpgrade()之后,android会自动处理所有这些内容。当下一次更新到期时(即您再次增加DATABASE_VERSION),将自动调用onUpgrade()。

更清楚一点:只要保留一个static final int DATABASE_VERSION字段,每当你更改数据库结构中必不可少的内容时,就会在开发时增加该字段。

您创建了一个扩展SQLLiteOpenHelper的类,基本上如下所示:

public class ContentDatabase extends SQLiteOpenHelper {

  // Whenever you change the DB structure, increment DATABASE_VERSION (it starts from 1, so  your first upgrade should be 2)
  // - note it's only used for upgrades; if it's a new install, onUpgrade won't be called and everything is done by onCreate instead
  private static final int DATABASE_VERSION = 6;

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

  public void onCreate(SQLiteDatabase db) {
    // Code to create the most recent version of your database 
    // i.e. CREATE TABLE xxx (....) 
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Code to update an existing database structure to the most recent 
    // version. 

    if (oldVersion < 2) {
      // do something to upgrade the DB to version 2
    }

    if (oldVersion < 3) {
      // do something to upgrade the DB to version 3
    }

    if (oldVersion < 6) {
      // Let's assume you added a new table in v4, and then added a field to that new table in v6
      if (oldVersion < 4) {
        // add the v6 version of the new table to the DB
      }
      else {
        // add the new field to the existing v4 table in the DB
      }
    }

  }
}

每当您需要更改表的结构(即添加附加列或表)时,您将DATABASE_VERSION变量增加1并相应地为onCreate()和onUpdate()方法编写代码。这些方法由android自动调用。

答案 1 :(得分:0)

考虑在应用程序上下文中使用SharedPreferences,您可以在那里跟踪lastVersion,并且您的应用程序将检查onCreate()以查看lastVersion是否与此应用程序的版本匹配。

它在更新之间是持久的,但不是在安装之间。

你可以这样做,因此版本0等同于没有你需要你设置新数据库。使用SharedPreference mPref = getSharedPreference(String,int) 然后,您可以使用

之类的代码
if(mPref.getInt("DB_VERSION", 0) == 0 ) { 
  no db yet so create one
} else {  db is there, 
    if (mPref.getInt("DB_VERSION",0) != DATABASE_VERSION) { 
             do some special update stuff here
    } 
}