I have a table with column headings: | _id (long) | Name (String) | x (integer) | y (integer) |
I want to delete the row in the table that has Name myName.
Try putting the value of the where clause in quotes...
KEY_NAME + "='" + myName + "'"
Also, it is bad practice (generally) to use a string-based WHERE clause. This is because if my name has an apostrophe in it, your app will not work. You should probably look for an alternative way to delete records from a database on Android.
depending on the complexity of your where condition, the "delete" method will not be the best solution.
for example, if you want to delete all records whose "_id" is in a second table, like you would write in transactSQL: "...WHERE _id IN (SELECT _id FROM..." then the best solution might be to use the ".execSQL()" method directly on your database.
myDatabase.execSQL("DELETE FROM myTable WHERE _id IN (SELECT _id FROM myOtherTable)");
or you could go real ugly and do something like:
int cursorRows = cursor.getCount();
String[] id2String = new String[cursorRows];
String id2StringUnique = "";
//for (int i=0;i<cursorRows;i++) {
int i=0;
for(cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()){
id2String[i] = String.valueOf(cursor.getLong(index_ID));
if (i==0) {
id2StringUnique = "'"+id2String[i]+"'";
} else {
id2StringUnique += ",'"+id2String[i]+"'";
}
i++;
}
dbHelper.delete(DATABASE_TABLE_2, "_id IN (", id2StringUnique +")");
depending on number of items, you might have a problem with the length / size of your argument - besides it being diselegant to the extreme.
Sure, that works, although I would recommend
dbHelper.delete(DATABASE_TABLE_2, KEY_NAME + "=?", new String[] { myName })
for safety reasons. That way, you can have special characters without breaking your query. Did this not work?
just try this simple code
private void deleteItem()
{
try
{
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.delete(TABLE_NAME, " title = 'haiyang'", null);
setTitle("title");
} catch (SQLException e) {
}