i wrote code ensure database updated when release updates application.
the problem onupdate() function of sqliteopenhelper never called. here code wrote in main activity -
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(); }
here constructor of sqliteopenhelper(which extends sqliteopenhelper) -
public databasehelper(context context,int ver_code) { super(context, db_name, null, ver_code); this.mycontext = context; }
now understood super line supposed call onupgrade() function automatically, doesn't.
i've tested function onupgrade() separately, , works.
does know what's problem?
thanks!
what doing not neccessary. sqliteopenhelper need. here's possible scenario. sqliteopenhelper has getversion() method in case need query @ 1 point (i never did):
public class mysqliteopenhelper extends sqliteopenhelper { private static final string dbname = "whatever"; private static final int dbversion = 1; // first version //private static final int dbversion = 2; // second version //private static final int dbversion = 3; // 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 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) { // ... } }
Comments
Post a Comment