SQLiteOpenHelper "onCreate" no se llama? (El DB no existe)

De un fragmento que instancio de esta manera

fmdata = new FileManagerData(getActivity()); 

La siguiente clase. No entiendo por qué onCreate () no se llama y mi base de datos no se crea.

 public class FileManagerData { public static final String TAG = FileManagerData.class.getSimpleName();; Context context; DBHelper dbHelper; public FileManagerData (Context context){ this.context = context; dbHelper = new DBHelper(); } private class DBHelper extends SQLiteOpenHelper{ private static final String DB_NAME = "filename.db"; private static final String DB_SQL = "filename.sql"; private static final int DB_VERSION = 1; // internal number public DBHelper() { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // this is NEVER called and my DB does not exist yet } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } 

EDIT : El truco es que la base de datos tiene que ser utilizado (para leer o escribir) para onCreate () obtener llamado.

El método onCreate se llamará después del primer acceso al DB . Hacer una consulta a la base de datos y onCreate se invocará.

Probablemente la base de datos existe desde un intento anterior.

Desinstala tu aplicación e inténtalo de nuevo.

Usted debe poner en onCreate esto:

 sqLiteDatabase.execSQL("create table" + DB_NAME + " ( _id integer primary key autoincrement, " + fieldOne + "INTEGER, " + fieldTwo + "INTEGER);"); 

Donde fieldOne y fieldTwo son nombres de las columnas de su tabla. También mira aquí: http://www.sqlite.org/datatype3.html

Sé que este hilo ya ha aceptado la respuesta. Sin embargo, esto es lo que tengo que añadir:

yo tengo:

  protected class OpenHelper extends SQLiteOpenHelper { @Override public void onCreate(SQLiteDatabase db) { try { MHSqlDb.this.createTables(db); } catch (Exception e) { e.printStackTrace(); } } 

Estoy llamando a esto:

  iOpenHelper = new OpenHelper(iDbFileName, DATABASE_VERSION ); 

El archivo databese no existe en esta etapa.

Entonces hago un poco de depuración de la aplicación. Nunca llamo

  iOpenHelper.getReadableDatabase(); 

Ni yo llamo

  iOpenHelper.getWritableDatabase(); 

El archivo de base de datos todavía no existe. Ahora cuando mato la aplicación del depurador puedo ver repentinamente el archivo de la base de datos (con el nombre en iDbFileName) creado. El método onCreate de OpenHelper nunca se llama.

Así que aunque estoy de acuerdo en que la intención de onCreate método parece ser llamado cuando el archivo de base de datos no existe y getReadableDatabase () o getWritableDatabase () se llama, al parecer, no siempre es el caso.

La desinstalación de la aplicación eliminará el db y, por lo tanto, llamará onCreate en la siguiente ejecución.

  • ¿Cuál es el modo de subprocesamiento predeterminado de SQLite en Android?
  • Intenta reabrir un objeto ya cerrado: sqlitequery
  • SQLiteOpenHelper múltiples bases de datos en memoria
  • SQLiteOpenHelper - ¿Cómo se crea la base de datos?
  • Android SQLiteException: Error al cambiar la configuración regional de db a 'en_US'
  • Insertar datos JSON en la base de datos SQLite en android
  • Confundido sobre CursorLoaders y usarlos con un SQLiteOpenHelper personalizado
  • Robolectric: ejecutar múltiples pruebas falla
  • SQLiteOpenHelper: la forma más rápida de ejecutar ~ 20k instrucciones?
  • Obtención de contexto en onCreate en SQLiteOpenHelper
  • No se puede bajar la base de datos de la versión `n` a` n-1` en Samsung
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.