2013-04-29 89 views
11

目前我正在做这样的:如何清洗/删除greenDao数据库

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

但后来,当我试图实体添加到数据库中,我越来越崩溃日志说,这表不存在

编辑1: 我知道这是因为数据库被锁定,表尚未创建。所以我减少了这个问题 - 如何知道这些表是否被锁定在grrenDao/Sqlite中?

回答

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" 

我希望它有帮助。

+1

不好意思,但这里T是什么? – 2017-03-19 07:29:15

13

如何为每个表使用类似的东西?

daoSession.getSometableDao().deleteAll(); 
+0

你可能会忘记,如果你在将来添加新表添加额外的电话.. – ODAXY 2017-11-27 08:00:08

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

试试这个:

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

它只有清洁cartDao表。 – Nico 2017-02-16 03:29:14

1

现在可以这样做:

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