2016-06-10 80 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(暱稱) 「=?」);