目前我是这样做的:

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

但是,当我试图向数据库中添加实体时,我得到了一个崩溃日志,上面说这个表不存在。
Eddi1:
我知道发生这种情况是因为数据库被锁定,表尚未创建。所以我将这个问题简化为这个问题——如何知道表是否锁定在grrendao/sqlite中?

最佳答案

到目前为止,我不担心表是否被锁定;在我的情况下,我会执行以下操作,它会工作:
首先,当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"

希望有帮助。

10-08 08:16