Hi guys,

I am working on an android application where i have to use multiple
databases. I have used previously created db file. Actually i am copying
the db file from asset folder.
Now there is option to add data for the user(add favorites). The user data
will be added in all three db.

Now the problem is i need to upgrade all the db when there is a new version
of the app. I have to keep the user data inserted by the user and add the
changes of the new db.
I have done some googling and find solution to upgrade one db but i can not
find a solution to upgrade all the databases and keep the old versions user
data.

Here is my dbhelper class:

//////////////////////////////////////////////////////////////////////////////////////////////////
package riskycoder.database.helper;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Locale;

import riskycoder.utils.AppStaticValues;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBaseHelper extends SQLiteOpenHelper {
 private static String DB_PATH = "/data/data/riskycoder.login/databases/";
public static String DB_NAME = "datenbank_EN.sqlite";
private SQLiteDatabase myDataBase;
private final Context myContext;
private static final int DATABASE_VERSION = 1;
 private static final String DB_NAME_ENG = "datenbank_EN.sqlite";
private static final String DB_NAME_GER = "datenbank_DE.sqlite";
private static final String DB_NAME_SPA = "datenbank_SP.sqlite";
private Cursor updateCursor;

public static void setDataBaseName(String lan)
{
if(lan.equals("ENG"))
{
DB_NAME=DB_NAME_ENG;
}
else if(lan.equals("GER"))
{
DB_NAME=DB_NAME_GER;
}
else if(lan.equals("SPA"))
{
DB_NAME=DB_NAME_SPA;
}
}
 public DataBaseHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
this.myContext = context;
updateCursor=null;
}

public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
this.getWritableDatabase();
} else {
this.getWritableDatabase();
try {
this.close();
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}

}

private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath,
null,SQLiteDatabase.OPEN_READWRITE);
} catch (SQLiteException e) {
}
if (checkDB != null)
checkDB.close();
return checkDB != null ? true : false;
}

private void copyDataBase() throws IOException {

InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[2048];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
 //myDataBase.setVersion(DATABASE_VERSION);
}

public void openDataBase() throws SQLException {
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath,
null,SQLiteDatabase.OPEN_READWRITE);
Log.d("Test", "Database version: " +myDataBase.getVersion());
 if(updateCursor!=null && updateCursor.getCount()!=0)
{
updateCursor.moveToFirst();
do{
 myDataBase.execSQL("UPDATE Content SET is_favourite='1' WHERE  content_id
='"+updateCursor.getInt(updateCursor.getColumnIndex("content_id"))+"' AND
 category_id =
'"+updateCursor.getInt(updateCursor.getColumnIndex("category_id"))+"'");
}while(updateCursor.moveToNext());
 updateCursor.close();
}
}

@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
 public Cursor Get_Header_Cursor(){
Cursor cursor;
 cursor = myDataBase.rawQuery("select * from Headers ORDER BY
header_orderId",null);
return cursor;
}
 public Cursor Get_Group_Cursor(int id){
Cursor cursor = myDataBase.rawQuery("select * from Categories where
header_id = "+id+" ORDER BY category_orderId",null);
return cursor;
}
 public Cursor Get_Content_Cursor(int id){
Cursor cursor = myDataBase.rawQuery("select * from Content where
category_id = "+id,null);
return cursor;
}

public Cursor Get_Favourite_Cursor(){
Cursor cursor = myDataBase.rawQuery("select * from Content where
is_favourite = 1",null);
return cursor;
}

@Override
public void onCreate(SQLiteDatabase db) {
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 if(newVersion>oldVersion)
{
 updateCursor = db.rawQuery("select * from Content where is_favourite =
1",null);
Log.d("Test", "is fav"+updateCursor.getCount());
try {
copyDataBase();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

 }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

Please help how to upgrade all the databases.......

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to