2013-04-29 30 views
11

Hiện nay tôi đang làm nó như thế này:Làm thế nào để làm sạch/xóa cơ sở dữ liệu greenDao

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

nhưng sau đó, khi tôi đang cố gắng để thêm đối tượng vào cơ sở dữ liệu, tôi nhận được nhật ký sự cố nói rằng đây bảng không tồn tại

Chỉnh sửa1: Tôi biết rằng điều đó xảy ra vì db bị khóa và bảng chưa được tạo. Vì vậy, tôi đang giảm vấn đề này cho vấn đề - làm thế nào để biết nếu các bảng được khóa trong grrenDao/Sqlite?

Trả lời

6

Cho đến bây giờ, tôi không lo lắng liệu bảng có bị khóa hay không; trong trường hợp của tôi, tôi làm như sau và nó hoạt động:

Trước tiên, khi App.onCreate thực hiện, tôi thực hiện khởi tạo tiêu chuẩn.

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

Trong một số thời điểm trong tương lai tôi thả và tái tạo tất cả các bảng, giống như bạn:

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

Nhưng trong trường hợp của tôi, sau đó tôi có thể ngay lập tức chèn một thực thể mới:

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" 

Tôi hy vọng điều đó sẽ hữu ích.

+1

Xin lỗi nhưng T là gì? –

13

Làm thế nào để sử dụng một cái gì đó như thế này cho mỗi bảng?

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

Bạn có thể quên thêm các cuộc gọi thêm nếu bạn thêm bảng mới trong tương lai .. – ODAXY

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

Hãy thử điều này một:

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

Giỏ hàng sạch chỉDao. – Nico

1

Còn bây giờ nó có thể được thực hiện như thế:

for (AbstractDao abstractDao : mDaoSession.getAllDaos()){ 
    abstractDao.deleteAll(); 
} 
Các vấn đề liên quan