Android-删除记录时发生SQLiteException

Android-删除记录时发生SQLiteException,android,android-sqlite,Android,Android Sqlite,目前,我们有一个应用程序,在从数据库中删除记录时,我们会收到许多崩溃报告 下面是应用程序崩溃的方法 public int deleteGroupMap(String nickName) { SQLiteDatabase database = this.getWritableDatabase(); try { return database.delete(TABLE_NAME_GROUP_MAP, COLUMN_GMAP_NICK_NAME + " = '" + n

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

下面是应用程序崩溃的方法

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:靠近“adz”:语法错误 (代码1):,编译时:从组中删除 gmap_nick_name=''adz'

任何帮助都将不胜感激。

像这样试试

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;
}
看看签名:

int delete (String table, String whereClause, String[] whereArgs)
第三个参数是其中的args:

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

它是自动转义的,因此不需要手动加引号(“,”)

使用where args代替字符串concating:

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

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

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

尝试以下操作,因为它也会阻止SQL注入到您的应用程序中


数据库.delete(TABLE_NAME_GROUP_MAP,COLUMN_GMAP_NICK_NAME+“=?”,new String[]{String.valueOf(昵称));

可能,
adz
作为
“adz”
传递。尝试将最终的
替换为
\”
。我想你必须将……COLUMN_GMAP_NICK_NAME+“=”……更改为……。COLUMN\GMAP_NICK\u NAME+”=“……在你犯的错误中”“在需要的地方”