In Android 4.2, using SQLite 3.7.11, when I delete a row from the Quizzes table, who’s schema is below, the corresponding rows in the QuizQuestions table are not deleted.
I can’t figure out what’s wrong. I have tried putting
db.execSQL("PRAGMA foreign_keys = ON;");
before and after the create table statements.
Create table statements:
CREATE TABLE quizzes(quiz_name TEXT PRIMARY KEY COLLATE NOCASE);
CREATE TABLE quizQuestions(quiz_name TEXT, question_id INTEGER,
PRIMARY KEY(quiz_name, question_id),
FOREIGN KEY(quiz_name) REFERENCES quizzes(quiz_name) ON DELETE CASCADE,
FOREIGN KEY(question_id) REFERENCES questions(question_id) ON DELETE CASCADE);
Your database should delete rows from
quizQuestionsin case someone is deleting fromquizzesor fromquestions. It will ignore the entire foreign key constraint in case foreign key support is turned off and you have just regular columns that can contain any value.SQLite defaults to
PRAGMA foreign_keys = OFFevery time you open the database. It’s not a property of a table or of the schema.In case you use
SQLiteOpenHelperput it inonOpen. That is the place that is called every time the database is opened.onCreateonly once when the database is created.What
SQLiteOpenHelpercalls when you callgetWriteableDatabasefor the first time isonConfigureevery time, API Level >= 16 requiredonCreateif there is no database file. Typically, this happens only once in the entire lifetime of the app.onUpgradeif the database version (PRAGMA user_version– saved inside the database file) is less then the version supplied in SQLiteOpenHelper’s constructor. Happens every time you bump the version in your code.onOpenevery timeIf the same instance of
SQLiteOpenHelperalready has an open database it will just return it and nothing of above happens.