Delete row in database table given one column value – which is a string

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.

  • Showing the current selection in a listview
  • Prevent Activity Stack from being Restored?
  • BitmapDrawable deprecated alternative
  • get the latest fragment in backstack
  • Java/Android - Validate String JSON against String schema
  • Disable center button in MyLocation at Google Map API V2
  • // In onCreate
    dbHelper = new DBAdapter(this);
    dbHelper.open()
    
    // Function in DBAdapter class
    public boolean deleteTitleGivenName(String myName) 
    {
        return dbHelper.delete(DATABASE_TABLE_2, KEY_NAME + "=" + myName, null) > 0;
    }
    
    // Function call in java code
    dbHelper.deleteTitleGivenName(myName);  // this is where my code fails  
    
    dbHelper.close();           
    

    Just as a note: myName is for sure in the database. Also, I can not use the ROWID since I am getting myName from a ListView.

    I just started programming with Android and I have tried for days to solve this problem.
    Is my WHERE clause correct (KEY_NAME + “=” + myName)?

    Thanks in advance.

  • SyncAdapter alternatives
  • Controlling your phone from laptop
  • When getView() in ArrayAdapter is called
  • QR code scanning without fullscreen camera
  • how to check screen on/off status in onStop()?
  • Testing onActivityResult()
  • 4 Solutions collect form web for “Delete row in database table given one column value – which is a string”

    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?

    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.

    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) {
    
        }
    
    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.