Sjharrison
Sjharrison

Reputation: 729

Android Studio - SQLiteOpenHelper issues

I have the following Java Class

package com.sjhdevelopment.shaunharrison.myejuiceapp;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDBHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "EJuiceData.db";
public static final int DATABASE_VERSION = 1;


public MyDBHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

public void onCreate(SQLiteDatabase database) {
    database.execSQL("create table if not exists Inventory");
}

@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    if (newVersion > oldVersion)
        database.execSQL("ALTER TABLE Recipe ADD COLUMN NOTES TEXT");
    onCreate(database);
}

}

Then in my main activity I have the following;

public class Calculation extends AppCompatActivity {
   private MyDBHelper dbHelper;
   protected void onCreate(Bundle savedInstanceState)
   {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_calculation);
      try {
        dbHelper = new MyDBHelper(this);
        dbHelper.getWritableDatabase();

      }
      catch(Exception e)
      {
        showError("Error", e.getMessage());
      }
   }

However, when I debug the code to see if the database + tables are being created with a break point on the try and on the database.execSQL("create.... There debugger doesn't actually go into the MyDBHelper class to do anything, therefore I'm assuming that the database + tables aren't being created

I've looked online and it says that when a getWritableDatabase/readable is called the onCreate method should get called

Any idea's as to what I'm doing wrong?

Upvotes: 1

Views: 1116

Answers (2)

Aegis
Aegis

Reputation: 5791

It looks like your SQL is not correct onCreate. Instead of database.execSQL("create table if not exists Inventory"); it should be

database.execSQL("CREATE TABLE table_name 
                  (id_column INTEGER PRIMARY KEY
                  , column_name TEXT);";

You need to manually created every table with all the corrected columns. They will be created once you call the database for the first time.

Upvotes: 0

leonardkraemer
leonardkraemer

Reputation: 6793

onCreate(...) is only called when the database is created for the first time. If you want to change your database you have to increase DATABASE_VERSION then it will jump into onUpgrade(...)

Upvotes: 2

Related Questions