我编写了一些代码,以确保在发布对应用程序的更新时可以正确更新数据库.
问题是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()函数,并且可以正常工作.
有谁知道这是什么问题?
谢谢!
@H_502_28@解决方法:您所做的事情实际上不是必需的. 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) { // ... }}
总结 以上是内存溢出为你收集整理的更新数据库无效-Android全部内容,希望文章能够帮你解决更新数据库无效-Android所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)