Как очистить/удалить базу данных greenDao

В настоящее время я делаю так:

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

но затем, когда я пытаюсь добавить объект в базу данных, я получаю журнал сбоев, говорящий, что эта таблица не существует

Edit1: Я знаю, что это происходит потому, что db заблокирован и таблицы еще не созданы. Поэтому я уменьшаю эту проблему до проблемы - как узнать, заблокированы ли таблицы в файле grrenDao/Sqlite?

Ответ 1

До сих пор я не беспокоюсь, заблокированы ли таблицы или нет; в моем случае, я делаю следующее, и он работает:

Во-первых, когда App.onCreate выполняется, я делаю стандартные инициализации.

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

В какой-то момент в будущем я бросаю и воссоздаю все таблицы, как и вы:

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

Но в моем случае, я могу сразу вставить новый объект:

    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"

Надеюсь, это поможет.

Ответ 2

Как насчет использования чего-то подобного для каждой таблицы?

daoSession.getSometableDao().deleteAll();

Ответ 3

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

Ответ 4

Теперь это можно сделать следующим образом:

for (AbstractDao abstractDao : mDaoSession.getAllDaos()){
    abstractDao.deleteAll();
}

Ответ 5

Попробуйте следующее:

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