Android: onUpgrade not calling at database upgrade

android, android-sqlite, database, sql-update, sqlite

Solution

In order to upgrade your database you need to do properly by manipulating the schema I found Both the answers for my questions were useful...

Upgrading database version automatically

Problem

I am developing the second version of my application. In which I am facing a problem. In my application the database is in the assets folder. Now I want to update my database from the assets folder in the second version. I tried the code to upgrade as : ``` // Data Base Version. private static final int DATABASE_VERSION = 2; ``` I changed the version from 1 to 2. //Constructor ``` public DataBaseHelperClass(Context myContext) { super(myContext, DATABASE_NAME, null ,DATABASE_VERSION); this.context = myContext; //The Android's default system path of your application database. DB_PATH = "/data/data/com.example.myapp/databases/"; } ``` // Create data base ``` public void createDataBase() throws IOException{ //check if the database exists boolean databaseExist = checkDataBase(); if(databaseExist){ this.getWritableDatabase(); }else{ this.getReadableDatabase(); try{ copyDataBase(); } catch (IOException e){ throw new Error("Error copying database"); } }// end if else dbExist } // end createDataBase(). ``` // Check database ``` public boolean checkDataBase(){ File databaseFile = new File(DB_PATH + DATABASE_NAME); return databaseFile.exists(); } ``` // Copy database from assets ``` private void copyDataBase() throws IOException{ //Open your local db as the input stream InputStream myInput = context.getAssets().open(DATABASE_NAME); // Path to the just created empty db String outFileName = DB_PATH + DATABASE_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the input file to the output file byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } ``` // Open database ``` public void openDataBase() throws SQLException{ //Open the database String myPath = DB_PATH + DATABASE_NAME; sqliteDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); } ``` // Close database ``` @Override public synchronized void close() { if(sqliteDataBase != null) sqliteDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { // No need to write the create table query. // As we are using Pre built data base. // Which is ReadOnly. } ``` // On Update database. ``` @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if(newVersion>oldVersion){ context.deleteDatabase(DATABASE_NAME); try { copyDataBase(); } catch (IOException e) { e.printStackTrace(); } } else { } } ``` But the issue is that, the database is not updated after executing the apk in the device. Now what should I do. My applications first version is on the market. Don't know how to update database in the second version. Please guide me with your valuable suggestions, I am in middle of my application and I am not able to move. EDIT : onUpgrade not calling. As i tried to print log in 1st line in onUpgrade but it is not printed. So the issue is that, onUpgrade is not calling.

Original source

Related problems