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

前端 未结 4 775
旧时难觅i
旧时难觅i 2020-12-03 11:09

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.



        
相关标签:
4条回答
  • 2020-12-03 11:23

    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.

    0 讨论(0)
  • 2020-12-03 11:31

    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.

    0 讨论(0)
  • 2020-12-03 11:39

    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?

    0 讨论(0)
  • 2020-12-03 11:39

    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) {
    
        }
    
    0 讨论(0)
提交回复
热议问题