2016-06-10 38 views
-2

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

以下是应用程序崩溃的方法。

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):在编译:DELETE FROM groups_map WHERE gmap_nick_name =''adz。'

任何帮助将不胜感激。

+0

也许,'adz'作为'“adz”传递。尝试用'\“替换最终的''''。 – 2016-06-10 10:20:59

+0

我想你改变了...... COLUMN_GMAP_NICK_NAME +“='”.......到........ COLUMN_GMAP_NICK_NAME +“=”........在那个uby你犯的错误''在需要的地方' –

回答

2

delete签名:

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

第三个参数就是ARGS:

您可以包括S中的where子句中,这将由whereArgs中的 值替换。这些值将被绑定为字符串。

它会自动逃跑,所以没有需要手动把引号(”“)

用途,其中ARGS而不是字符串concating:

database.delete(TABLE_NAME_GROUP_MAP, COLUMN_GMAP_NICK_NAME + " = ?", new String[] { nickName }); 
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; 
} 
0

试试这个

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

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

试试下面的,因为它也将防止SQL注入到你的应用程序

database.delete(TABLE_NAME_GROUP_MAP,COLUMN_GMAP_NICK_NAME +,新的String [] {将String.valueOf(昵称) “=?”);