2012-02-05 13 views
6

Estoy intentando actualizar mi tabla de base de datos con el siguiente código:getWritableDatabase llama de forma recursiva

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     String query = "ALTER TABLE names ADD COLUMN hidden integer default 0"; 
     dbHelper.getWritableDatabase().rawQuery(query, null); 

    } 

Sin embargo, cuando inicio la aplicación e intenta actualizar la base de datos me sale el siguiente excepción:

...Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively 

¿Alguien sabe cómo puedo evitar este problema y qué es exactamente lo que está causando?

Gracias

+0

este no puede ser el único lugar donde se llama esta parte del código ¿verdad? – JoxTraex

+0

Sí, este es el único lugar donde se llama el código. Puse una declaración de registro en la función también y solo se llama una vez. – Nick

+0

Luego verifique si la versión anterior es JoxTraex

Respuesta

23

no llame a getWritableDatabase(). Use el que pasó:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    String query = "ALTER TABLE names ADD COLUMN hidden integer default 0"; 
    db.rawQuery(query, null); 

} 

¿Por qué? Cuando llama al getWritableDatabase(), OpenHelper detecta que la base de datos necesita ser actualizada, por lo tanto, inicia la advertencia de recursión que está viendo. En otras palabras, estás en onUpgrade(). Llama al getWritableDatabase(), que ve que se necesita una actualización. Si no fuera por el control, volvería directamente al onUpgrade(), ad infinitum.

+0

Gran respuesta, totalmente extrañada que @Brian Dupuis +1 – JoxTraex

+0

Bosque para los árboles :). Gracias. –

+0

Perfecto, gracias! – Nick

Cuestiones relacionadas