I have an app with a database version = 1. Now I want to upgrade my database to version = 2.
However my problem is when I am running updated application on previous version with changed database version it is calling onCreate()
method instead of onUpgrade()
.
I know onCreate()
is called when database is created for first time and onUpgrade() is called when we change the database version.
I went through a lot of stack overflow questions but couldn't able to get a solution
Note : I have a preloaded database created using SqliteManager stored in asset folder. What I have done till now is as below
Database :
private static String DB_PATH = "/data/data/context.getPackageName()/databases/";
private static String DB_NAME = "db_name";
private static final int DATABASE_VERSION = 2;
// reference of database
private SQLiteDatabase mySqliteDb;
private Context context;
public DBController(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
this.context = context;
}
/****************** onCreate() ***********************/
@Override
public void onCreate(SQLiteDatabase database) {
Log.v("On create method", "On create method"); // This log is printing
}
/********************* Upgrade ************************/
@Override
public void onUpgrade(SQLiteDatabase database, int version_old,
int current_version) {
Log.v("On upgrade method", version_old +"");
}
/************* Create Database *********************/
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
Log.v("DATABASE call ", "DATABASE exists"); // This log is printing
this.getWritableDatabase();
} else {
Log.v("DATABASE call ", "DATABASE not exist");
this.getWritableDatabase();
try {
copyDataBase();
} catch (IOException e) {
// Log.e("Error", e.toString());
throw new Error("Error copying database");
}
}
}
/***************** Check whether database exist or not *******************/
private boolean checkDataBase() {
File dbFile = new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
private void copyDataBase() throws IOException {
// Open your local db as the input stream
InputStream myInput = context.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
// Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
// transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[5120];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
/************************************ database open *************************************/
public void openDataBase() throws SQLException {
String myPath = DB_PATH + DB_NAME;
mySqliteDb = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
And I am calling my database on my first activity
DBController dbController = new DBController(Login.this);
try {
dbController.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}
And after running my code
Log.v("On create method", "On create method");
Log.v("DATABASE call ", "DATABASE exists");
this two logs are printing.
So I am unable to upgrade my database as it is not going to onUpgrade()
block.
Please help me if I am missing something here.
I found a similar type of question with my problem in stack overflow. Here is the link.