使用具有多个子句的where子句删除SQLite行

我一直在寻找,没有设法find一个解决scheme或工作的例子,所以在这里。

我build立了一个SQLite数据库,它有五个不同的字段,有效地为用户build立一个列表。 列表中将有多个相同的值,除了设置为自动递增的ROWID外。

一旦一个值被input到数据库中,用户和程序都不会知道ROWID,所以我想让用户能够删除一行,如果它包含所有其他四个字段。

我的代码如下所示:

Database .delete(DATABASE_TABLE, "KEY_DATE='date' AND KEY_GRADE='style2' AND KEY_STYLE='style' AND KEY_PUMPLEVEL='pumpLevel'", null); 

但是这并没有删除任何值。 我几乎可以肯定,这个命令的语法是责怪。

如何使用多个where子句来格式化where子句中的delete命令?

从下面解决:

 ourDatabase.delete(DATABASE_TABLE, "ROWID = (SELECT Max(ROWID) FROM " + DATABASE_TABLE + " WHERE " + "date=? AND grade=? AND " + "style=? AND pump_level=?)", new String[] { date, grade, style, pumpLevel }); 

Solutions Collecting From Web of "使用具有多个子句的where子句删除SQLite行"

我有一种感觉, KEY_DATEKEY_GRADE等是Javavariables名称而不是您的实际列名称。 尝试将您的代码更改为:

 .delete(DATABASE_TABLE, KEY_DATE + "='date' AND " + KEY_GRADE + "='style2' AND " + KEY_STYLE + "='style' AND " + KEY_PUMPLEVEL + "='pumpLevel'", null); 

另外,我假设'date''style'等存储在本地variables中,您应该使用whereArgs参数来从SQL注入攻击自己投影:

 .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"等)


从评论添加

要删除最后一行,请使用以下命令:

 .delete(DATABASE_TABLE, "ROWID = (SELECT Max(ROWID) FROM " + DATABASE_TABLE + ")", null); 

要删除最后一个匹配的行,请试试这个:

 .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); 

但是看到我关于SQL注入攻击的第二个注意事项来保护你的数据。

你应该使用:

 Database.delete(DATABASE_TABLE, "KEY_DATE=? AND KEY_GRADE = ? AND KEY_STYLE = ? AND KEY_PUMPLEVEL = ?", new String[]{"date", "style2", "style", "pumpLevel"}); 

这简化了转义价值。