Currently I'm doing it like this:
DaoMaster.dropAllTables(getDb(), true);
DaoMaster.createAllTables(getDb(), true);
but then, when I'm trying to add entity to the database, I'm getting crash log saying that this table isn't exist
Edit1: I know that it happens because the db is locked and tables wasn't created yet. So I'm reducing this problem to the problem - how to know if the tables are locked in grrenDao/Sqlite?
How about using something like this for each table?
daoSession.getSometableDao().deleteAll();
Until now, I don't worry if tables are locked or not; in my case, i do the following and it works:
First, when App.onCreate executes, I make the standard initializations.
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();
In some moment in the future I drop and recreate all tables, just like you:
T.daoMaster.dropAllTables(T.sqLiteDatabase, true);
T.daoMaster.createAllTables(T.sqLiteDatabase, true);
But in my case, then I can immediately insert a new entity:
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"
I hope it helps.
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);
}
For now it can be done like that:
for (AbstractDao abstractDao : mDaoSession.getAllDaos()){
abstractDao.deleteAll();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With