2013-04-29 17 views
11

Obecnie robię to tak:Jak czyścić/usuwać bazy greenDao

DaoMaster.dropAllTables(getDb(), true); 
DaoMaster.createAllTables(getDb(), true); 

ale wtedy, gdy próbuję dodać do bazy danych podmiotu, jestem coraz dziennika awarii, mówiąc, że to tabela nie istnieje

Edycja1: Wiem, że tak się dzieje, ponieważ baza danych jest zablokowana, a tabele nie zostały jeszcze utworzone. Więc ograniczam ten problem do problemu - jak sprawdzić, czy tabele są zablokowane w grrenDao/Sqlite?

Odpowiedz

6

Do tej pory nie martwię się, jeśli stoły są zablokowane lub nie; w moim przypadku wykonuję następujące czynności:

Po pierwsze, po uruchomieniu App.onCreate wykonuję standardowe inicjalizacje.

T.devOpenHelper= new DaoMaster.DevOpenHelper(context, "mydatabase", null); 
    T.sqLiteDatabase= T.devOpenHelper.getWritableDatabase(); 
    T.daoMaster= new DaoMaster(T.sqLiteDatabase); 
    T.daoSession= T.daoMaster.newSession(); 
    T.dao_myEntity= T.daoSession.getMyEntityDao(); 

W pewnym momencie w przyszłości mogę usunąć i ponownie wszystkie tabele, takich jak Ty:

T.daoMaster.dropAllTables(T.sqLiteDatabase, true); 
    T.daoMaster.createAllTables(T.sqLiteDatabase, true); 

Ale w moim przypadku, to może od razu wstawić nowy podmiot:

MyEntity e= new MyEntity(); 
    e.setId_ticket(1L); 
    e.setDescription("wololo"); 
    long id= T.dao_myEntity.insert(e); 
    Log.d(G.tag, "T.erase_all: id: " + id); // prints "T.erase_all: id: 1" 

Mam nadzieję, że to pomaga.

+1

Przepraszam, ale co tu jest? –

13

Co powiesz na użycie czegoś takiego dla każdego stołu?

daoSession.getSometableDao().deleteAll(); 
+0

Możecie zapomnieć dodać kolejne połączenia, jeśli dodać nowe tabele w przyszłości .. – ODAXY

2
public static void clearDatabase(Context context) { 
     DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(
       context.getApplicationContext(), Constants.SQL_DB_NAME, null); 
     SQLiteDatabase db = devOpenHelper.getWritableDatabase(); 
     devOpenHelper.onUpgrade(db,0,0); 
    } 
-2

Spróbuj tego:

QueryBuilder<cart> qb = SQLConfig.cartDao.queryBuilder(); 
List<cart> mUpadateData = qb.where(cartDao.Properties.Product_sku.eq(skuApi)).list(); 
SQLConfig.cartDao.deleteInTx(mUpadateData); 
+0

To jedyne czyste stoły z kartoflami. – Nico

1

Teraz można to zrobić tak:

for (AbstractDao abstractDao : mDaoSession.getAllDaos()){ 
    abstractDao.deleteAll(); 
} 
Powiązane problemy