13

目前我正在这样做:

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

但是,当我尝试将实体添加到数据库时,我收到崩溃日志,说该表不存在

Edit1:我知道发生这种情况是因为数据库已锁定并且尚未创建表。所以我将这个问题简化为问题 - 如何知道表是否锁定在 grrenDao/Sqlite 中?

4

6 回答 6

14

为每张桌子使用这样的东西怎么样?

daoSession.getSometableDao().deleteAll();
于 2013-09-10T14:42:51.937 回答
6

到现在为止,我不担心表是否被锁定;就我而言,我执行以下操作并且它有效:

首先,当 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"

我希望它有所帮助。

于 2015-09-07T01:24:24.423 回答
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);
    }
于 2016-04-18T06:45:14.060 回答
2

现在可以这样做:

for (AbstractDao abstractDao : mDaoSession.getAllDaos()){
    abstractDao.deleteAll();
}
于 2017-10-23T17:02:35.877 回答
0

我升级了 build.gradle 中的 schemaVersion 以通过此错误

于 2018-07-17T14:23:01.227 回答
-2

试试这个:

QueryBuilder<cart> qb = SQLConfig.cartDao.queryBuilder();
List<cart> mUpadateData = qb.where(cartDao.Properties.Product_sku.eq(skuApi)).list();
SQLConfig.cartDao.deleteInTx(mUpadateData);
于 2016-04-20T11:02:18.470 回答