Delete SQLite Row with where clause with multiple clauses
I have a feeling that KEY_DATE
, KEY_GRADE
, etc are you Java variable names not your actual column names. Try changing your code to this:
.delete(DATABASE_TABLE, KEY_DATE + "='date' AND " + KEY_GRADE + "='style2' AND " + KEY_STYLE + "='style' AND " + KEY_PUMPLEVEL + "='pumpLevel'", null);
Also I assume that 'date'
, 'style'
, etc are stored in local variables, you should use the whereArgs
parameter to project yourself from SQL Injection Attacks:
.delete(DATABASE_TABLE, KEY_DATE + "=? AND " + KEY_GRADE + "=? AND " + KEY_STYLE + "=? AND " + KEY_PUMPLEVEL + "=?", new String[] {date, grade, style, pumpLevel});
(where date = "date"
, grade = "style2"
, etc)
Added from comments
To delete the last row use this:
.delete(DATABASE_TABLE, "ROWID = (SELECT Max(ROWID) FROM " + DATABASE_TABLE + ")", null);
To delete your last matching row try this:
.delete(DATABASE_TABLE, "ROWID = (SELECT Max(ROWID) FROM " + DATABASE_TABLE + " WHERE " + "KEY_DATE='date' AND KEY_GRADE='style2' AND " + "KEY_STYLE='style' AND KEY_PUMPLEVEL='pumpLevel')", null);
But see my second note about SQL Injection Attacks to protect your data.
You should use:
Database.delete(DATABASE_TABLE, "KEY_DATE=? AND KEY_GRADE = ? AND KEY_STYLE = ? AND KEY_PUMPLEVEL = ?", new String[]{"date", "style2", "style", "pumpLevel"});
which simplifies escaping values.