2016-06-10 9 views
-2

Derzeit haben wir eine Anwendung, in der wir viele Absturzberichte erhalten, während Datensätze aus der Datenbank gelöscht werden.Android - SQLiteException beim Löschen von Datensatz

Hier ist die Methode, in der App abstürzt.

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; 
} 

, aber wir am folgenden Ausnahme erhalten:

android.database.sqlite.SQLiteException: in der Nähe von "adz": Syntaxfehler (Code 1):, beim Kompilieren: DELETE FROM groups_map WHERE gmap_nick_name = '' adz. '

Jede Hilfe wird geschätzt.

+0

Wahrscheinlich wird 'adz' als" adz "' übergeben. Versuchen Sie, die eventuellen '' 's durch' \ "' zu ersetzen. –

+0

ich Thiunk Sie haben sich zu ändern ..... COLUMN_GMAP_NICK_NAME + "= '" ....... bis ........ COLUMN_GMAP_NICK_NAME + "=" ........ in diesem uby Fehler, den Sie machen "wo es erforderlich war" –

Antwort

2

Blick auf delete Unterschrift:

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

drittes Argument ist, wo args:

Sie enthalten können s in der Klausel, wo, die ersetzt werden durch die Werte von WhereArgs. Die Werte werden als Strings gebunden.

Es automatisch entkommen, so gibt es keine Notwendigkeit, Anführungszeichen zu setzen (‘„) manuell

Verwenden wo args statt Saiten concating.

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

Versuchen wie dieser

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

Versuchen Sie, diese

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

Sie sollten auch Parametermarker verwenden, da das direkte Anhängen von Werten fehleranfällig ist, wenn die Quelle Sonderzeichen enthält

try folgenden, weil es auch SQL-Injektionen, um Ihre Anwendung

database.delete (TABLE_NAME_GROUP_MAP, COLUMN_GMAP_NICK_NAME +, new String [] {String.valueOf (Spitzname) "=?") Verhindern wird;

Verwandte Themen