目前我们有一个应用程序,我们在从数据库中删除记录时收到许多崩溃报告。
以下是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。'
任何帮助将不胜感激。
答案 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));