Android SQLiteOpenHelper: ¿Por qué no se llama al método onCreate ()?

Estoy tratando de hacer mi primera aplicación de Android. Noté que no se llama al método SQLiteOpenHelper.onCreate() para crear tablas si la base de datos no existe. Sin embargo, el método onCreate() no funcionó aunque pensé que intenté depurar.

Por favor mira el código de abajo y dame alguna sugerencia. Cualquier ayuda será apreciada.

 public class NameToPinyinActivity extends Activity { DatabaseOpenHelper helper = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.nametopinyin); Button searchButton = (Button) findViewById(R.id.search); searchButton.setOnClickListener(new ButtonClickListener()); helper = new DatabaseOpenHelper(NameToPinyinActivity.this); } public class DatabaseOpenHelper extends SQLiteOpenHelper { /** DB Name */ private static final String DB_NAME = "pinyin"; /** CREATE TABLE SQL */ private static final String CREATE_TABLE_SQL = "CREATE TABLE UNICODE_PINYIN" + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, " + "UNICODE TEXT NOT NULL, PINYIN TEXT NOT NULL)"; public DatabaseOpenHelper(Context context) { super(context, DB_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.beginTransaction(); try { db.execSQL(CREATE_TABLE_SQL); db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { db.endTransaction(); } } 

También he tenido problemas con el SQLiteOpenHelper . Lo que funcionó para mí fue almacenar una variable miembro

 SQLiteDatabase db; 

En la subclase de SQLiteOpenHelper y llamando

  db = getWritableDatabase(); 

en el constructor

La respuesta a esta pregunta también incluye información útil: ¿ SQLiteOpenHelper no puede llamar a onCreate?

¡Espero que esto ayude!

Hasta que llame al método getWritableDatabase() o getReadableDatabase() de la clase SQLiteOpenHelper , no se creará la base de datos.

tan simple como esa base de datos se creará en la memoria cuando realmente la necesite. 🙂

Tuve un problema similar donde onCreate no se ejecutó. Tal vez esto sea de alguna utilidad para alguien, aunque resultó ser un problema diferente.

Antes estaba trabajando en la base de datos y ya había creado mucho tiempo antes. Así que ahora, después de hacer cambios en onCreate (), esperaba encontrar las nuevas tablas creadas. Pero el SQLiteOpenHelper nunca llamó a onCreate () de nuevo. Razón fue, la base de datos ya existía. Seguía trabajando con el mismo dispositivo que antes y, por consiguiente, con la base de datos ya existente (antigua).

Pero hay esperanza. Cuando el sistema ve que ya existe una base de datos con ese nombre, también verifica si el número de versión es correcto. En ese caso simplemente olvidé que la base de datos ya existía. Mi solución era simplemente cambiar el número de versión. Entonces se llamó a onUpgrade () ofreciendo opciones para los cambios onCreate ().

Por lo tanto, las opciones fueron desinstalar la aplicación completa (y con ella la base de datos) o llamar a onCreate nuevamente después de actualizar el número de versión (y, por ejemplo, descartar) la tabla anterior y llamar a onCreate () nuevamente.

En cualquier caso, si no se llama a onCreate (), verifique dos veces si existe la base de datos. De lo contrario no se llama de nuevo.

Tuve el mismo problema … la resolución para mí fue agregar .db como extensión del nombre de la base de datos

Tuve un problema similar, sin embargo, no fue la llamada de OnCreate el problema.

En el código de ejemplo anterior, Kevin explicó que OnCreate no se llama si la base de datos ya existe. Sin embargo, si, como yo, está utilizando varias tablas de actividades separadas, aunque ya haya creado la base de datos, es posible que la tabla asociada con esta actividad aún no se haya creado. Por lo tanto, cuando intenta establecer los datos del cursor en una tabla no existente, invocará una excepción.

Mi solución fue definir una clase separada llamada CreateTable que se llama tanto desde el reemplazo de OnCreate como desde el constructor después de

db = getWritableDatabase();

En mi caso, no fue llamado porque la base de datos ya existía! Entonces, si es posible, asegúrese de eliminar su aplicación e instalarla de nuevo y solo entonces verifique si se está llamando o no.

Compruebe si existe el archivo db y luego abra la instancia de la base de datos que se puede escribir llamando

dbinstance.getWritableDatabase ()

Puede cambiar AUTOINCREMENTO a INCREMENTO AUTOMÁTICO

Nota SQLiteOpenHelper Called onCreate cuando se crea la base de datos por primera vez. Si crea una tabla en el método onCreate, no puede crear una nueva base de datos SQLite . Puedes ver ejemplo

  @Override public void onCreate(SQLiteDatabase db) { String stringCreateTable = "CREATE TABLE "+"tblUser"+" ( " + "id TEXT PRIMARY KEY, " + "name TEXT )"; db.execSQL(stringCreateTable); }