喂 我正在构建一个包含数据库的Android应用程序。 我的问题是如何知道应用程序是否已更新? 我的意思是,我知道在来自 -
的DATABASE_VERSION时会调用onUpgrade方法public DataBaseHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
this.myContext = context;
}
低于应用版本,但如何在更新后递增,因此应用不会一直自行更新?
答案 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
}
}