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?
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);
}
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 :)
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);
}
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();
SQLiteDatabase db = this.getWritableDatabase(); //get database
db.execSQL("DELETE FROM tablename"); //delete all rows in a table
db.close();
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 ...
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.
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();
}
}