2015-05-21 21 views
6

Ho circa 20-30 tabelle nel mio database ActiveAndroid. Quando premo logoutButton voglio cancellare tutti i tavoli. Come posso farlo in ActiveAndroid?Come è possibile cancellare tutte le tabelle in ActiveAndroid?

public void logOut() { 
    //clear all tables 
} 
+0

Stai chiedendo una soluzione completa. Questo è incoraggiato su Stackoverflow. Invece, scrivi il tuo codice e quando incontri un problema, (1) cerca una risposta, (2) chiedi solo se non lo hai trovato. –

+1

Faccio una domanda specifica. come pulire la base. – ip696

+0

Elimina il file di database –

risposta

10
 SQLiteDatabase db = ActiveAndroid.getDatabase(); 
     List<String> tables = new ArrayList<>(); 
     Cursor cursor = db.rawQuery("SELECT * FROM sqlite_master WHERE type='table';", null); 
     cursor.moveToFirst(); 
     while (!cursor.isAfterLast()) { 
      String tableName = cursor.getString(1); 
      if (!tableName.equals("android_metadata") && 
        !tableName.equals("sqlite_sequence")) { 
       tables.add(tableName); 
      } 
      cursor.moveToNext(); 
     } 
     cursor.close(); 
     for (String tableName : tables) { 
      db.execSQL("DELETE FROM " + tableName); 
     } 
+0

Buono. Ho tutti i nomi dei miei tavoli. Come posso cancellare questo tavoli? – ip696

+0

Siamo spiacenti, ho dimenticato di aggiungere la cancellazione –

+0

Ricevo un 'SQLiteConstraintException' perché ho una chiave esterna tra alcune delle mie tabelle. Qualche soluzione per gestire questo? –

5

Prova questo:

public void logOut() { 
    new Delete().from(MyClass.class).executeSingle(); 
} 
+1

In 35 classe ???????? – ip696

+1

quindi cancella il tuo db -> this.deleteDatabase ("your_db"); – jlopez

0

Spero che questo potrebbe aiutare qualcuno utilizzando Active Android.

per eliminare tutti i record in una tabella c'è un modo semplice.

1) Innanzitutto creare di classe "TruncatableModel" e si estendono tutti i vostri modelli di questa classe

public abstract class TruncatableModel extends Model { 
    public static void truncate(Class<? extends Model> type){ 
     final String tableName = Cache.getTableInfo(type).getTableName(); 

     // Delete all rows from table 
     ActiveAndroid.execSQL(String.format("DELETE FROM %s;", tableName)); 

     // Reset ids 
     ActiveAndroid.execSQL(String.format("DELETE FROM sqlite_sequence WHERE name='%s';", tableName)); 
    } 
} 

.. così dopo l'estensione, la mia classe del modello sarà simile.

@Table(name = "note") 
public class Note extends TruncatableModel { 
    @Column(name ="idn") 
    public Integer idn; 
    @Column(name ="title") 
    public String title; 
    ... 
} 

2) Ora posso cancellare tutti i record nel database "note" utilizzando questo codice.

Note.truncate(Note.class); 

Questo sembra essere il modo più efficiente rispetto a qualsiasi altro metodo che ho provato.

Problemi correlati