185 votes

Comment supprimer tous les enregistrements d'une table dans sqlite avec Android ?

Mon application comporte deux boutons, le premier permettant de supprimer l'enregistrement en fonction de la saisie de l'utilisateur et le second permettant de supprimer tous les enregistrements. Mais lorsque je veux supprimer des données, le message suivant s'affiche
"Votre demande a été arrêtée par la force".

Veuillez vérifier mon code et me donner quelques suggestions.

public void deleteAll()
{
    //SQLiteDatabase db = this.getWritableDatabase();
   // db.delete(TABLE_NAME,null,null);
    //db.execSQL("delete * from"+ TABLE_NAME);
    db.execSQL("TRUNCATE table" + TABLE_NAME);
    db.close();
}

et

public void delete(String id)
{
    String[] args={id};
    getWritableDatabase().delete("texts", "_ID=?", args);
}

Mais il affiche l'erreur suivante Log cat.

03-07 15:57:07.143: ERROR/AndroidRuntime(287): Uncaught handler: thread main exiting due to uncaught exception
03-07 15:57:07.153: ERROR/AndroidRuntime(287): java.lang.NullPointerException
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.example.MySQLiteHelper.delete(MySQLiteHelper.java:163)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.example.Settings$4.onClick(Settings.java:94)
-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at android.os.Looper.loop(Looper.java:123)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at android.app.ActivityThread.main(ActivityThread.java:4203)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at java.lang.reflect.Method.invokeNative(Native Method)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at java.lang.reflect.Method.invoke(Method.java:521)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at dalvik.system.NativeStart.main(Native Method)

1 votes

Il semble que getWritableDatabase() vous renvoie un résultat nul, vous devriez étudier ce problème.

7 votes

Il manque un espace après le "from", de sorte que le nom de la table est concaténé avec le "from" et que vous obtenez une erreur.

1 votes

Vous pouvez également essayer d'utiliser try{} catch(Exception e){Console.WriteLine(e);} pour éviter d'écraser le programme et analyser l'erreur.

389voto

coelho Points 1013

Tu as oublié un espace : db.execSQL("delete * from " + TABLE_NAME);

De plus, il n'est même pas nécessaire d'inclure * la requête correcte est :

db.execSQL("delete from "+ TABLE_NAME);

7 votes

Il n'y a aucune raison d'inclure le * .

8 votes

Utilisez Vacuum après la commande de suppression.. db.execSQL("vacuum") ; ceci effacera tous les espaces alloués

7 votes

La requête est simplement "SUPPRIMER DE TABLENAME". tutorialspoint.com/sqlite/sqlite_delete_query.htm J'ai passé 1 heure avant de comprendre que * avait tort !

176voto

Paolo M Points 584
db.delete(TABLE_NAME, null, null);

ou, si vous voulez que la fonction renvoie la valeur nombre de lignes supprimées ,

db.delete(TABLE_NAME, "1", null);

Extrait de la documentation de SQLiteDatabase supprimer méthode :

Pour supprimer toutes les lignes et obtenir un compte, passez "1" dans la clause whereClause.

0 votes

Comment supprimer tout ce qui se trouve dans une table, sauf si une valeur est égale à quelque chose.

0 votes

Vous devez appeler delete() avec des arguments non nuls. developer.Android.com/reference/Android/database/sqlite/

52voto

Burakito Points 71

Pour supprimer toutes les lignes d'un tableau, vous pouvez utiliser :

db.delete(TABLE_NAME, null, null);

34voto

Itay Grudev Points 2014

SQLite ne supporte pas l'option TRUNCATE commande. Vous devez utiliser ce que vous avez essayé dans la ligne précédente :

DELETE FROM `TABLE_NAME`;

P.S. Vous pouvez optimiser votre programme en utilisant la même instance de la connexion à la base de données pour toutes vos requêtes à la base de données donnée au lieu d'en créer une nouvelle pour chaque requête.

19voto

gaurav kumar Points 11

Il n'est pas nécessaire d'utiliser la fonction "execute". Le code suivant a fonctionné pour moi :: :

    db.delete(TABLE_NAME,null,null);
    db.close();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X