Android - 删除记录

时间:2016-06-10 10:17:41

标签: android android-sqlite

目前我们有一个应用程序,我们在从数据库中删除记录时收到许多崩溃报告。

以下是app崩溃的方法。

public int deleteGroupMap(String nickName) {
    SQLiteDatabase database = this.getWritableDatabase();
    try {
        return database.delete(TABLE_NAME_GROUP_MAP, COLUMN_GMAP_NICK_NAME + " = '" + nickName + "'", null);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        database.close();
    }
    return 0;
}

但我们遇到以下异常:

  

android.database.sqlite.SQLiteException:near" adz":语法错误   (代码1):,编译时:DELETE FROM groups_map WHERE   gmap_nick_name ='' adz。'

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

查看delete签名:

int delete (String table, String whereClause, String[] whereArgs)

第三个论点是args:

  

你可以在where子句中包含?,它将被替换为   来自whereArgs的值。这些值将绑定为字符串。

它会自动转义,因此无需手动输入引号(',“)。

使用args而不是字符串concating:

database.delete(TABLE_NAME_GROUP_MAP, COLUMN_GMAP_NICK_NAME + " = ?", new String[] { nickName });

答案 1 :(得分:0)

尝试这样

public int deleteGroupMap(String nickName) {
SQLiteDatabase database = this.getWritableDatabase();
try {
   database .execSQL("DELETE FROM "+ TABLE_NAME_GROUP_MAP + " WHERE " + COLUMN_GMAP_NICK_NAME  + " = "+nickName+"");
   database .close();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    database.close();
}
return 0;
}

答案 2 :(得分:0)

试试这个

return database.delete(TABLE_NAME_GROUP_MAP, COLUMN_GMAP_NICK_NAME + "= ?" , new String[]{Long.toString(nickName)});

答案 3 :(得分:0)

您还应该使用参数标记,因为当源包含特殊字符时,直接附加值会出错。

尝试关注,因为它还会阻止对您的应用进行SQL注入

database.delete(TABLE_NAME_GROUP_MAP,COLUMN_GMAP_NICK_NAME +" =?",new String [] {String.valueOf(nickName));

相关问题