¿Por qué SQLiteOpenHelper llama a onCreate() cada vez que se inicia mi aplicación? Aquí está mi código para onCreate()La base de datos de Android se recrea cada vez que se inicia la aplicación
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("onCreate()", "Enter");
//create cards table
db.execSQL(
"create table circles" +
"("+
"id integer primary key,"+
"x integer not null," +
"y integer not null"+
")"
);
Log.i("onCreate()", "Exit");
}
tengo una clase exterior alrededor de mi clase SQLiteOpenHelper extendida, y cuando me consulta, hago esto:
Cursor cursor = openHelper.getWritableDatabase().rawQuery("select * from circles", null);
y se salta este bloque, debido a esta declaración si
if (cursor.moveToFirst()) {...}
Aquí es toda mi clase de contenedor de base de datos:
package db.main;import java.util.ArrayList; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import testing.main.Circle;
public class DBWrapper {
private static final String DATABASE_NAME = "circles.db"; private static final int DATABASE_VERSION = 1; private static final String[] TABLES = new String[] { "circles"};
private Context context; private OpenHelper openHelper;
public DBWrapper(Context context) { context.deleteDatabase(DATABASE_NAME); this.context = context; this.openHelper = new OpenHelper(this.context); }
public void insertCircle(Circle c) { String sql = "insert into circles (x, y) values (" + c.getX() + ", " + c.getY() + ")"; Log.i("DBWrapper::insertCircle()", "Executing sql: " + sql); openHelper.getWritableDatabase().execSQL(sql); }
public void clearCircles() { String sql = "delete * from circles"; Log.i("DBWrapper::clearCircles()", "Executing sql: " + sql); openHelper.getWritableDatabase().execSQL(sql); }
public ArrayList getCircles() { ArrayList circles = new ArrayList(); Cursor cursor = openHelper.getWritableDatabase().query(TABLES[0], null, null, null, null, null, null); //Cursor cursor = openHelper.getWritableDatabase().rawQuery("select * from circles", null); Log.i("DBWrapper::getCircles()", "move to first1"); if (cursor.moveToFirst()) { Log.i("DBWrapper::getCircles()", "move to first"); do { Log.i("DBWrapper::getCircles()", "Creating circle: " + cursor.getString(1) + ", " + cursor.getString(2)); circles.add(new Circle(Integer.parseInt(cursor.getString(1)), Integer.parseInt(cursor.getString(2)))); } while (cursor.moveToNext()); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } return circles; } private static class OpenHelper extends SQLiteOpenHelper {
OpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { Log.i("OpenHelper::onCreate()", "Enter"); //create cards table db.execSQL( "create table circles" + "("+ "id integer primary key,"+ "x integer not null," + "y integer not null"+ ")" ); Log.i("OpenHelper::onCreate()", "Exit"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w("Example", "Upgrading database, this will drop tables and recreate."); for(String s: TABLES) { db.execSQL("DROP TABLE IF EXISTS " + s); } onCreate(db); }
}}
Déjame saber si necesito para publicar más código ni nada. Gracias.
Hmmm. ¿Estás probando un emulador? Si es así, quizás deba verificar que no borre los datos del usuario del emulador antes de iniciarlo. – Hamy
No, estoy probando en un dispositivo – wangburger
¿Tal vez podría publicar todo el cuerpo del código de la base de datos? No veo el problema en lo que tiene aquí:/ – Hamy