Estoy trabajando en una aplicación de Android donde utilicé la base de datos sqlite existente en la carpeta de activos. Así que en realidad copio la base de datos de esa carpeta. El usuario también puede guardar sus propios datos (marque cualquier contenido como favorito).Base de datos sqlite onUpgrade() no se llama
He subido una versión en el mercado. Ahora quiero agregar algunos datos nuevos en la base de datos y cargar una nueva versión. Si el usuario actualiza la aplicación desde el mercado, quiero conservar los datos del usuario (de la versión anterior) y agregar los nuevos datos también. He hecho un poco de google y descubrí que el método de actualización debería ser el truco. Pero estoy cambiando el DATABASE_VERSION del código, pero el método de actualización no recibe la llamada. Me pregunto si me he perdido algo. Aquí está mi código:
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;
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
this.myContext = context;
}
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
} 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());
}
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d("Test", "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
}
}
* Estoy cambiando la Database_Version de código .. *, ¿qué exactamente significa esto? Veo que llamas al superconstructor del 'SQLiteOpenHelper' con un campo constante' DATABASE_VERSION' (que obviamente no se puede cambiar), entonces, ¿cómo cambias exactamente la versión de la base de datos? – Luksprog
En la nueva versión de la aplicación, he cambiado DATABASE_VERSION a 2. Por lo tanto, al instalar la nueva versión, se debe llamar al método onUpgrade. ¿O me falta algo? – rawcoder064
Primero, el código que publicaste showa DATABASE_VERSION es 1, por lo que no se llamaría a OnUpgrade.En segundo lugar, incluso si fuera 2, su actualización no tiene código para hacer nada para actualizar la base de datos. No sucede automágicamente, tienes que hacerlo. – Barak