Comment supprimer tous les éléments de SQLite dans Android

Je voudrais créer une application où l'utilisateur clique sur un bouton et la base de données SQLite est effacée. Voici ce que j'ai essayé jusqu'à présent:

db.delete(TABLE_NAME, null, null);

Qu'est-ce que je fais de mal?

21
demandé sur Brian Tompsett - 汤莱恩 2011-04-16 05:22:16

8 réponses

Votre appel delete() est correct. Avez-vous obtenu une base de données inscriptible? Voici un exemple de méthode utilisant delete:

/**
 * Remove all users and groups from database.
 */
public void removeAll()
{
    // db.delete(String tableName, String whereClause, String[] whereArgs);
    // If whereClause is null, it will delete all rows.
    SQLiteDatabase db = helper.getWritableDatabase(); // helper is object extends SQLiteOpenHelper
    db.delete(DatabaseHelper.TAB_USERS, null, null);
    db.delete(DatabaseHelper.TAB_USERS_GROUP, null, null);
}
44
répondu petrnohejl 2011-04-16 01:48:48

Db.delete (TABLE_NAME, null, null); est la syntaxe correcte pour supprimer toutes les lignes d'une table. Mais je pense que vous auriez donné le nom de la table directement sans l'entourer de guillemets doubles. Essayez comme ceci

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

Cela pourrait aider :)

16
répondu suraj 2012-05-05 08:14:36

En fait, une autre façon de le faire était de DROP les tables, puis d'appeler simplement la méthode onCreate pour le SQLiteDatabase. Je ne sais pas lequel est le plus efficace Delete ou Drop parce que je n'ai pas vraiment creusé profondément dans l'efficacité de chaque méthode, mais cela fonctionne très bien pour moi parce que dans ma base de données initiale, j'ai des valeurs par défaut et donc quand j'appelle la méthode onCreate pour la base de données, j'ai Cela enregistre la réplication de code. ( au lieu de faire la suppression puis les puts que je reçois un multi-usage hors de ma fonction onCreate).

Je l'appelle reset. Donc, il vous suffit de faire db.reset(), puis les valeurs par défaut sont ajoutées dans le onCreate Après avoir créé vos tables.

public void reset () throws SQLException {
    db = DBHelper.getWritableDatabase ();
    db.execSQL ("drop table "+TABLE_NAME);
    db.close ();
    this.DBHelper.onCreate (this.db);
}
3
répondu Jordan Hochstetler 2016-10-19 12:48:34

Utilisez ce Code pour effacer tout le contenu de la base de données

Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
String tableName="";
  if (c.moveToFirst()) {

      while ( !c.isAfterLast() ) {

          tableName = c.getString( c.getColumnIndex("name"));
          if(!tableName.equals('android_metadata')){
            db.execSQL("DROP TABLE '"+tableName+"'");
          }
          c.moveToNext();
      }
  }

c.close();
2
répondu Sandeep 2013-07-15 13:14:06
SQLiteDatabase db = this.getWritableDatabase(); //get database
        db.execSQL("DELETE FROM tablename"); //delete all rows in a table
db.close();
1
répondu Cristiana Chavez 2014-12-15 05:03:12

Pour moi, la déclaration mysql Classique:

SQLiteDatabase sqLiteDatabase = context.openOrCreateDatabase(Database.DATABASE_NAME, Context.MODE_PRIVATE, null, null);
sqLiteDatabase.execSQL("DELETE FROM " + tableName1);
sqLiteDatabase.execSQL("DELETE FROM " + tableName2);
sqLiteDatabase.execSQL("DELETE FROM " + tableName3);
sqLiteDatabase.execSQL("DELETE FROM " + tableName4);

A parfaitement Fonctionné. bonne chance :)
PS.: sans start / endtransaction ou closeDatabase ...

0
répondu cV2 2015-03-03 11:34:35

Une chose que vous pouvez essayer lors du développement sur un périphérique:

Paramètres > > applications > > (nom de votre application)>> Stockage > > Effacer le cache et effacer les données

En effaçant les données de l'application et le cache de l'application, vous effacez également la base de données sql.

0
répondu Sm0k3Scr33n 2016-09-18 08:22:46

Utilisez ce code:

public void deleteAll()
{
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("delete from "+ TABLE_NAME);
    db.close();
}

Vous pouvez l'ajouter à la classe DatabaseHandler, c'est le code source complet:

public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
public static final String DATABASE_NAME = "OffLineMessagesClient";

// Contacts table name
public static final String TABLE_NAME = "messages_client";

// Contacts Table Columns names
private static final String KEY_ENTITY_ID = "entity_id";
private static final String KEY_MESSAGE = "message";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
            + KEY_ENTITY_ID + " INTEGER,"
            + KEY_MESSAGE + " TEXT"
            +  ")";

    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
                      int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

    // Create tables again
    onCreate(db);
}

public void deleteAll()
{
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("delete from "+ TABLE_NAME);
    db.close();
}
}
0
répondu Faxriddin Abdullayev 2018-02-07 11:02:51