目前我这样做:
DaoMaster.dropAllTables(getDb(), true);
DaoMaster.createAllTables(getDb(), true);
但是,当我尝试将实体添加到数据库时,我收到崩溃日志,说这个表不存在
EDIT1: 我知道这是因为数据库被锁定而且还没有创建表。所以我正在解决这个问题 - 如何知道这些表是否被锁定在grrenDao / Sqlite中?
答案 0 :(得分:14)
如何为每张桌子使用这样的东西?
daoSession.getSometableDao().deleteAll();
答案 1 :(得分: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"
我希望它有所帮助。
答案 2 :(得分: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);
}
答案 3 :(得分:2)
现在可以这样做:
for (AbstractDao abstractDao : mDaoSession.getAllDaos()){
abstractDao.deleteAll();
}
答案 4 :(得分:0)
我升级了build.gradle中的schemaVersion以解决此错误
答案 5 :(得分:-2)
试试这个:
QueryBuilder<cart> qb = SQLConfig.cartDao.queryBuilder();
List<cart> mUpadateData = qb.where(cartDao.Properties.Product_sku.eq(skuApi)).list();
SQLConfig.cartDao.deleteInTx(mUpadateData);