When does android create an SQL database?

I've just started programming in android a few months ago and am confused about when android actually creates the SQL database file. The dbhelper is referenced in multiple activities and I don't want the database to be referenced before it's created. Should I instantiate it in my main activity? I've created a helper/contract class to handle most of the SQL operation as follows:

public class PantryActivity extends AppCompatActivity {

protected void onCreate(Bundle savedInstanceState) {
    PantryDbHelper pantryDb = new PantryDbHelper(this);

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_pantry, menu);
    return true;

//The helper class for the SQL table
public class PantryDbHelper extends SQLiteOpenHelper {
    // If you change the database schema, you must increment the database version.
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "Pantry.db";

    public PantryDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    public void onCreate(SQLiteDatabase db) {

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // This database is only a cache for online data, so its upgrade policy is
        // to simply to discard the data and start over
        //TODO add code to handle upgrades, import table over async task
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        onUpgrade(db, oldVersion, newVersion);

    //TODO add write/read methods for SQL database

    //contract class for the SQL database, used to identify columns/set up tables
    public final class PantryContract {
        public PantryContract() {

        public abstract class PantryColumns implements BaseColumns {
            //Column identifiers to be used in each table
            public static final String TABLE_NAME = "Pantry";
            public static final String COLUMN_NAME_FOOD_ITEM = "FoodItem";
            public static final String COLUMN_NAME_FOOD_TYPE = "FoodType";
            public static final String COLUMN_NAME_FOOD_AMOUNT = "Amount";
            public static final String COLUMN_NAME_EXPIRATION_DATE = "ExpirationDate";
        public static final String COLUMN_NAME_CALORIES = "Calories";
        public static final String COLUMN_NAME_CARBOHYDRATES = "Carbohydrates";
        public static final String COLUMN_NAME_FAT = "Fat";
        public static final String COLUMN_NAME_PROTEIN = "Protein";

        //Table data types/comma
        private static final String TEXT_TYPE = " TEXT";
        private static final String INTEGER_TYPE = " INTEGER";
        private static final String COMMA_SEP = ", ";
        private static final String PRIMARY_KEY = "PRIMARY KEY";
        private static final String UNIQUE_CONSTRAINT = " Unique";
        private static final String NOT_NULL_CONSTRAINT = " NOT NULL";

        //Table creation parameters
        private static final String SQL_CREATE_ENTRIES = "Create Table "+ PantryColumns.TABLE_NAME + " (" +
                PantryColumns._ID + INTEGER_TYPE + PRIMARY_KEY + COMMA_SEP +
                PantryColumns.COLUMN_NAME_FOOD_TYPE + TEXT_TYPE + COMMA_SEP +
                PantryColumns.COLUMN_NAME_FOOD_AMOUNT + TEXT_TYPE + COMMA_SEP +
                PantryColumns.COLUMN_NAME_EXPIRATION_DATE + TEXT_TYPE + " )";
            PantryColumns.COLUMN_NAME_FAT + INTEGER_TYPE + COMMA_SEP +
            PantryColumns.COLUMN_NAME_PROTEIN + INTEGER_TYPE



SQLiteOpenHelper constructors documentation states:

The database is not actually created or opened until one of getWritableDatabase() or getReadableDatabase() is called.

with SQLiteDBHelper you need not to worry about accessing it at wrong time as there is no wrong time. As soon as you create an instance of your DB Helper for the first time onCreate method of DB helper get called where you write queries to create your tables.

If you already have an older version of DB and you are installing app with new version of DB, onUpdate method get called. you can write update queries here.

Need Your Help

How to run Conda?

python anaconda conda

How do I run conda on a linux machine?

Automating tinymce with selenium

ruby selenium tinymce selenium-webdriver wysiwyg

I am having trouble writing on tinymce version 3.5.8.