Gar*_*wen 10 sqlite android where-clause sql-delete
我一直在寻找并没有设法找到解决方案或工作示例,所以这里.
我已经建立了一个SQLite数据库,它有五列不同的字段,可以有效地为用户构建一个列表.列表中将有多个值相同,除了设置为自动增量的ROWID.
无论是用户还是程序都知道的ROWID一旦值已被输入到数据库中,所以我希望用户能够删除一行,如果它包含了其他领域的所有四个.
我的代码看起来像这样:
Database
.delete(DATABASE_TABLE,
"KEY_DATE='date' AND KEY_GRADE='style2' AND KEY_STYLE='style' AND KEY_PUMPLEVEL='pumpLevel'",
null);
Run Code Online (Sandbox Code Playgroud)
但这并没有删除任何值.我几乎可以肯定这个命令的语法是罪魁祸首.
如何使用多个where子句格式化delete命令的where子句?
解决方案如下:
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 });
Run Code Online (Sandbox Code Playgroud)
Sam*_*Sam 20
我有一种感觉,KEY_DATE,KEY_GRADE,等你的Java变量名不实际的列名.尝试将代码更改为:
.delete(DATABASE_TABLE,
KEY_DATE + "='date' AND " + KEY_GRADE + "='style2' AND " +
KEY_STYLE + "='style' AND " + KEY_PUMPLEVEL + "='pumpLevel'",
null);
Run Code Online (Sandbox Code Playgroud)
此外,我认为'date','style'等存储在本地变量,你应该使用的whereArgs参数从Project自己的SQL注入攻击:
.delete(DATABASE_TABLE,
KEY_DATE + "=? AND " + KEY_GRADE + "=? AND " +
KEY_STYLE + "=? AND " + KEY_PUMPLEVEL + "=?",
new String[] {date, grade, style, pumpLevel});
Run Code Online (Sandbox Code Playgroud)
(其中date = "date",grade = "style2"等)
从评论中添加
要删除最后一行,请使用:
.delete(DATABASE_TABLE,
"ROWID = (SELECT Max(ROWID) FROM " + DATABASE_TABLE + ")",
null);
Run Code Online (Sandbox Code Playgroud)
要删除最后一个匹配的行,请尝试:
.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);
Run Code Online (Sandbox Code Playgroud)
但请参阅我关于SQL注入攻击的第二个注释来保护您的数据.
你应该使用:
Database.delete(DATABASE_TABLE,
"KEY_DATE=? AND KEY_GRADE = ? AND KEY_STYLE = ? AND KEY_PUMPLEVEL = ?",
new String[]{"date", "style2", "style", "pumpLevel"});
Run Code Online (Sandbox Code Playgroud)
这简化了逃避价值.
| 归档时间: |
|
| 查看次数: |
28515 次 |
| 最近记录: |