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+”=“……在你犯的错误中”“在需要的地方”