我编写了一些代码,以确保在发布对应用程序的更新时可以正确更新数据库.

问题是SQLiteOpenHelper的OnUpdate()函数从不被调用.

这是我在主要活动中编写的代码-

SharedPreferences DB_ver = getSharedPreferences(PREFS_NAME, 0);

myDbHelper = new DataBaseHelper(con, DB_ver.getInt("DB_ver", 1));

try {

if(DB_ver.getInt("DB_ver", 1) !=getPackageManager().getPackageInfo(getPackageName(), 0).versionCode )

{

SharedPreferences.Editor editor = DB_ver.edit();

editor.putInt("DB_ver", getPackageManager().getPackageInfo(getPackageName(), 0).versionCode);

}

} catch (NameNotFoundException e) {

e.printStackTrace();

}

这是SQLiteOpenHelper的构造函数(它扩展了SQLiteOpenHelper)-

public DataBaseHelper(Context context,int ver_code) {

super(context, DB_NAME, null, ver_code);

this.myContext = context;

}

现在,我了解到Super行应该自动调用onUpgrade()函数,但事实并非如此.

我已经分别测试了onUpgrade()函数,并且可以正常工作.

有谁知道这是什么问题?

谢谢!

解决方法:

您所做的事情实际上不是必需的. SQLiteOpenHelper可以满足您的所有需求.这是一个可能的情况. SQLiteOpenHelper有一个getVersion()方法,以防您需要一次查询它(我从没做过):

public class MySQLiteOpenHelper extends SQLiteOpenHelper {

private static final String dbname = "whatever";

private static final int dbversion = 1; // your first version

//private static final int dbversion = 2; // your second version

//private static final int dbversion = 3; // your third version

public MySQLiteOpenHelper(Context context) {

super(context, dbname, null, dbversion);

this.context = context;

}

@Override

public void onCreate(SQLiteDatabase sqliteDatabase) {

// ... Create first database content

}

@Override

public void onUpgrade(SQLiteDatabase sqliteDatabase, int oldVersion, int newVersion) {

switch (newVersion) {

case dbversion: // suppose your on third version

if (oldVersion == 1) {

upgradeFrom1To2(sqliteDatabase);

upgradeFrom2To3(sqliteDatabase);

}

if (oldVersion == 2) {

upgradeFrom2To3(sqliteDatabase);

}

break;

default:

break;

}

}

public void upgradeFrom1To2(SQLiteDatabase sqliteDatabase) {

// ...

}

public void upgradeFrom2To3(SQLiteDatabase sqliteDatabase) {

// ...

}

}

标签:sqlite,android,database

来源: https://codeday.me/bug/20191208/2091682.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐