2010-08-25 8 views
0

Je suis en train de supprimer un enregistrement d'un SQLiteDB via l'application Android, Ceci est la façon dont je l'ai utilisé le code pour supprimer l'enregistrementAndroid: SQLite Pas en mesure de supprimer un enregistrement spécifique

 
//Snippet of code in my DBAdapter Class 

public boolean DeleteRecord(String ContactName) { 

    Log.i(TAG, "DeleteRecord(String ContactName)"); 
    Log.i(TAG, ContactName); 
    return db.delete(TABLE_SIMPLETABLE_CLIENT1,KEY_EMPLOYEE_NAME + "=" 
      +ContactName,null); 
    } 

et de la une autre classe, j'essaie d'appeler cette méthode en ouvrant la DB et appelant cette méthode et de fermer à nouveau la DB, voici comment j'ai codé,

// Snippet de code dans ma classe DBApplication

 
public void onClick(DialogInterface dialog, 
    int which) { 
DBAdapter.open(); 
DBAdapter.DeleteRecord(DeleteRecord); 
//DeletRecord is string value that in DB(Sivaram)      
DBAdapter.close(); 
} 

Quand je le déployer, je l'obtiens l'erreur suivante,

 
08-25 14:52:20.602: ERROR/AndroidRuntime(231): android.database.sqlite.SQLiteException: no such column: Sivaram: , while compiling: DELETE FROM SimpleTable1 WHERE Employee_Name=Sivaram 

s'il vous plaît me aider, à trouver la solution

Merci à l'avance ...

+2

est-ce vraiment la peine pour le wiki de la communauté? – WarrenFaith

Répondre

8
Edit- 

Essayez et chk si elle fonctionne d'abord

return db.delete(TABLE_SIMPLETABLE_CLIENT1,KEY_EMPLOYEE_NAME + "='"+ContactName+"'",null); 

ici votre chaîne doit être dans votre clause where (3ème position) et vous juste besoin de mentionner votre nom de table en tant que votre deuxième paramètre je crois

delete(String tableName, String whereClause, String[] whereArgs) {} 
return db.delete(TABLE_SIMPLETABLE_CLIENT1,KEY_EMPLOYEE_NAME,new String[]{ContactName}); 
+0

Merci Rahul, votre effort m'a beaucoup aidé, maintenant cela fonctionne très bien, merci pour tout votre soutien .... –

5

Je pense que vous avez passé une mauvaise query.like

DELETE FROM SimpleTable1 WHERE Employee_Name=Sivaram; 

ce doit être comme ça.

DELETE FROM SimpleTable1 WHERE Employee_Name='Sivaram'; 

vérifiez-le. '' est indispensable pour le Text type de données

+0

@Nandagopal T: Utilisation des paramètres de position ('DELETE FROM SimpleTable1 WHERE Employee_Name =?') est un excellent moyen d'éviter cette erreur. – CommonsWare

+0

Salut les gars, Merci beaucoup pour votre grande réponse, mais peut u s'il vous plaît me montrer comment utiliser vos idées dans mon exemple, parce que j'ai essayé d'utiliser db.delete (TABLE_SIMPLETABLE_CLIENT1, KEY_EMPLOYEE_NAME + « = » \t \t \t \t + ' ContactName ', null); , De cette façon j'ai essayé d'utiliser, il me montre une erreur en tant que constante de caractère invalide .... SVP aidez-moi ... –

+0

Les guillemets simples doivent être dans les guillemets doubles: db.delete (TABLE_SIMPLETABLE_CLIENT1, KEY_EMPLOYEE_NAME + "= ' "+ ContactName +" '", null) – Intrications

0

vous pouvez écrire ce qui suit requête pour supprimer enregistrement par paasing les données sous forme de chaîne et sur cette base u peut supprimer l'enregistrement de la table dans la base

// delete a title by string name specified 
public Cursor deleteTitle(String i) 
{ 
    return db.query(true, DATABASE_TABLE, new String[] { Key_RowID }, 
     Key_Name + "= ?", new String[] { Key_Name.toString() }, null, null, 
     null, null); 
} 

Le problème avec votre qyery est que u havent converti votre champ de nom dans la base de données à chaîne-à-dire key_name. toString()

Essayez ceci cela pourrait aider

0
public boolean deletename(String rowid) { 
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowid, null) > 0; 
} 

Essayez le code de son travail bien pour moi. Il supprime les enregistrements en utilisant un identifiant de ligne unique. où row est ma clé primaire. Maintenant, si vous voulez supprimer en utilisant n'importe quel autre que rowid.

essayer cette

public boolean deletename(String eid) { 
    getrowid(eid); 
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + zCursor.getString(0).toString(), null) > 0; 
} 
public Cursor getrowid(String e_id) throws SQLException { 
    //System.out 
    // .println("---------------================Employee ID:" + e_id); 
    zCursor = db.query(true, DATABASE_TABLE, new String[] { KEY_ROWID }, 
    KEY_EID + "= ?", new String[] { e_id.toString() }, null, null, 
    null, null); 
    if (zCursor != null) { 
    zCursor.moveToFirst(); 
    //System.out.println("---------------================" 
    // + zCursor.getString(0)); 
    } 
    return zCursor; 
} 

ici je supprime mes dossiers des employés à l'aide du employeeid. donc je trouve unique rowid qui est ma clé primaire pour l'enregistrement donné, puis la suppression de l'enregistrement.

+0

Merci les gars, son travail très bien pour moi aussi, à cause de votre réponse .. Merci beaucoup ... –

Questions connexes