I am trying to create a local database on an android phone using sqlite
.
I have a helper class, shown below, that is used to create the database and provide the "help".
I am wanting to create an object of this class in the main part of my code and it create the database and tables there as well.
The problem:
Whenever i create an object of the class, it does not seem to be calling the onCreate
method in the helper. I thought this is supposed to happen. I thought that onCreate
was basically a constructor for the class. (I believe i am wrong)
onCreate
method? 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()); } }
The Activity lifecycle consists of 7 methods: onCreate() : When a user first opens an activity than the first method that gets called is called as onCreate. It acts the same as a constructor of a class, then when an activity is instantiated then onCreate gets called.
The first time this is called, the database will be opened and onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) and/or onOpen(SQLiteDatabase) will be called." Once opened successfully, the database is cached, so you can call this method every time you need to write to the database.
SQLiteOpenHelper class The android. database. sqlite. SQLiteOpenHelper class is used for database creation and version management. For performing any database operation, you have to provide the implementation of onCreate() and onUpgrade() methods of SQLiteOpenHelper class.
The onCreate
is not a constructor for the database class. It is only called if you try to open a database that does not exist. To open/create the database you need to add a call to one of these methods:
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(); } }
It is a bit big but here is my DatabaseAdapter you can take a look at: http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.java
You have to call getWritableDatabase()
or getReadableDatabase()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With