2015-05-21 20 views
6

Mam około 20-30 tabel w mojej bazie danych ActiveAndroid. Po naciśnięciu klawisza logoutButton chcę wyczyścić wszystkie tabele. Jak mogę to zrobić w ActiveAndroid?Jak wyczyścić wszystkie tabele w ActiveAndroid?

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

Pytasz o kompletne rozwiązanie. Jest to zalecane w przypadku Stackoverflow. Zamiast tego napisz swój własny kod, a gdy napotkasz problem, (1) szukaj odpowiedzi, (2) zapytaj tylko, czy go nie znalazłeś. –

+1

Zadaję konkretne pytanie. jak wyczyścić bazę. – ip696

+0

Usuń plik bazy danych –

Odpowiedz

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

Dobrze. Mam wszystkie nazwy moich stołów. Jak mogę wyczyścić te tabele? – ip696

+0

Niestety, zapomniałem dodać usunięcie –

+0

Otrzymuję 'SQLiteConstraintException' ponieważ mam klucz obcy między niektórymi z moich tabel. Jakieś rozwiązanie, aby sobie z tym poradzić? –

5

Spróbuj tego:

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

W 35 klasie ???????? – ip696

+1

następnie usuń bazę danych db -> this.deleteDatabase ("your_db"); – jlopez

0

Nadzieja to może pomóc ktoś korzysta z usługi Active Android.

do usuwania wszystkich rekordów w tabeli jest łatwy sposób.

1) najpierw utworzyć klasę „TruncatableModel” i rozszerzyć na wszystkie modele do tej klasy

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)); 
    } 
} 

.. więc po rozbudowie, moja klasa modelu będzie wyglądać.

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

2) Teraz mogę usunąć wszystkie rekordy z bazy danych "uwaga" za pomocą tego kodu.

Note.truncate(Note.class); 

Wydaje się, że jest to bardziej efektywny sposób niż jakiekolwiek inne metody, których próbowałem.