SQlite 删除所有具有特定字符串值的行

SQlite delete all rows that has a specific string value

此代码仅删除我的 Table 中的单个记录,我想要实现的是,删除具有给定字符串 phone 值的所有记录。我是 SQlite 的新手,非常感谢您的帮助。提前谢谢你。

此代码成功删除单条记录:

public void delSmsData(int id){
    String deleteQuery = "DELETE FROM "+TABLE_LO_SMSDATA+" WHERE _id="+id+"";
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL(deleteQuery); //delete single row by ID in a table
    db.execSQL("vacuum");
    db.close();
    Log.e("Debug", "Successful delete of message with id no. " + id);
}

我用这段代码成功删除了所有记录。感谢帮助过的人。

public void delAllSmsByPhone(String phone){
    String deleteQuery = "DELETE FROM "+TABLE_LO_SMSDATA+" WHERE _phone='"+phone+"'";
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL(deleteQuery); 
    db.execSQL("vacuum");
    db.close();
}

这是我的Table结构:

String CREATE_LO_SMSDATA_TABLE = "CREATE TABLE "
            +TABLE_LO_SMSDATA+"("
            +KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"
            +KEY_EMAIL+" TEXT,"
            +KEY_TARGETNAME+" TEXT,"
            +KEY_SMSTYPE+" TEXT,"
            +KEY_PHONE+" TEXT,"
            +KEY_CONTACTNAME+" TEXT,"
            +KEY_SMSBODY+" TEXT,"
            +KEY_DATE+" TEXT"+")";
    db.execSQL(CREATE_LO_SMSDATA_TABLE);

我完全不理解你。您尝试 运行 代码了吗?

This code is not the right approach

这是绝对正确的做法。 DELETE 可以删除任意数量的行,而不仅仅是一个。它删除 WHERE 子句为真的所有行。

证明:

sqlite> .tables
sms
sqlite> .schema sms
CREATE TABLE `sms` (
    `_id`   INTEGER PRIMARY KEY AUTOINCREMENT,
    `_phone`    TEXT
);
sqlite> SELECT * FROM sms;
1|+79271234567
2|+79271234567
3|+79213983722
4|+79271234567
5|+78450738422
6|+79271234567
7|+77432739417
8|+74673627246
9|+79271234567
10|+79271234567
sqlite> DELETE FROM sms WHERE _phone='+79271234567';
sqlite> SELECT * FROM sms;
3|+79213983722
5|+78450738422
7|+77432739417
8|+74673627246