SQLiteOpenHelper no puede llamar a Crear?

Estoy tratando de crear una base de datos local en un teléfono Android usando sqlite .

Tengo una clase de ayuda, que se muestra a continuación, que se utiliza para crear la base de datos y proporcionar la “ayuda”.

Deseo crear un objeto de esta clase en la parte principal de mi código y crear la base de datos y las tablas allí también.

El problema:

Cada vez que creo un objeto de la clase, no parece estar llamando al método onCreate en el helper. Pensé que esto debería suceder. Pensé que onCreate era básicamente un constructor para la clase. (Creo que estoy equivocado)

  • Entonces, ¿por qué no está llamando al método onCreate ?
  • ¿O cómo lo hago para crear la base de datos y las tablas donde estoy creando el objeto de la clase?
  • ¿Cuál sería una mejor manera de hacer esto, si este no es un buen enfoque?

 public class SmartDBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "smart_lite_db.db"; private static final int DATABASE_VERSION = 2; private static final String NOTIFY_TABLE_NAME = "user_notify_data"; private static final String HR_TABLE_NAME = "user_hr_data"; private static final String NOTIFY_TABLE_CREATE = "CREATE TABLE " + NOTIFY_TABLE_NAME + " (counter INTEGER PRIMARY KEY, " + "userresponse INTEGER, " + "notifytime INTEGER);"; private static final String DATA_TABLE_CREATE = "CREATE TABLE " + HR_TABLE_NAME + " (counter INTEGER PRIMARY KEY, " + "hr INTEGER, " + "act INTEGER, " + "timestamp INTEGER);"; public SmartDBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.v("smartdbhelper", "before creation"); db.execSQL(NOTIFY_TABLE_CREATE); Log.v("smartdbhelper", "middle creation"); db.execSQL(DATA_TABLE_CREATE); Log.v("smartdbhelper", "after creation"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } } 

 public class SmartApp extends Activity implements OnSharedPreferenceChangeListener { private SmartDBHelper dBHelper; public void onCreate(Bundle savedInstanceState) { //where i am wanting to create the database and tables dBHelper = new SmartDBHelper(getContext()); } } 

El onCreate no es un constructor para la clase de base de datos. Solo se llama si intenta abrir una base de datos que no existe. Para abrir / crear la base de datos necesita agregar una llamada a uno de estos métodos:

 public class SmartApp extends Activity implements OnSharedPreferenceChangeListener { private SmartDBHelper dBHelper; public void onCreate(Bundle savedInstanceState) { //where i am wanting to create the database and tables dBHelper = new SmartDBHelper(getContext()); // open to read and write dBHelper.getWritableDatabase(); // or to read only // dBHelper.getReadableDatabase(); } } 

Es un poco grande pero aquí está mi DatabaseAdapter que puedes ver en: http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.java

Tienes que llamar a getWritableDatabase() o getReadableDatabase() .