public void deleteData(String name,int itemID){
SQLiteDatabase db=getWritableDatabase();
String query="DELETE FROM "+ TABLE_NAME + " WHERE "+ "'"+ COL1 +"'"+ " = "+ itemID + " AND "+ "'" + COL2 + "'" +" ="+ " '"+ name + "'";
db.execSQL(query);
db.execSQL(query);
}
答案 0 :(得分:0)
以下是错误的,或者可能被认为是错误的。
应该不需要两次调用完全相同的查询。
在适合的情况下,最好使用Android SDK的便捷方法(而不是使用 execSQL 方法而不是 delete 方法更合适)。 / p>
在直接作为SQL执行的字符串中直接使用参数时,有可能发生SQLinjection攻击(请注意解析2并使用适当的参数可以解决此问题)。
除非列名用无效的名称命名,否则不需要将列名用单引号或其他字符引起来(无效的名称会使生活变得困难,因此如果使用,许多人会认为它们是错误的)。 / p>
如果删除(第一个)不起作用,或者使用pragma count_changes
后删除似乎未返回适当的结果,可能是由于该行不存在(该行是否被获取)插入?)还是第二个查询什么都不会删除,所以它隐藏了第一个查询的结果。
pragma count_changes
在更高版本的SQLite中已弃用,因此不应再使用(尽管Android的SQlite版本通常落后一些)。作为对所有不存在的ID的修复,您可以使用以下命令:-
public int deleteData(String name,int itemID){
SQLiteDatabase db=getWritableDatabase();
String whereclause = COL1 + "=? AND " + COL2 + "=?";
String[] whereargs = new String[]{String.valueOf(int),name};
return db.delete(TABLE_NAME,whereclause,whereargs);
}