2012-02-16 40 views
13

Tôi đang tìm phương pháp xóa tất cả dữ liệu của cơ sở dữ liệu ormlite hoặc xóa cơ sở dữ liệu (và sau đó tạo lại) bằng ormlite trên android.Xóa dữ liệu theo lập trình của cơ sở dữ liệu sqlite bằng thư viện ormlite

Tại thời điểm này, tôi chỉ có thể thay đổi DATABASE_VERSION của DatabaseHelper.

Nhưng tôi phải biên dịch ứng dụng.

Có ai đó biết phương pháp xử lý trường hợp đó không?

Trả lời

17

@ Câu trả lời của Julia sẽ hoạt động tốt. ORMLite cũng hỗ trợ TableUtils.clearTable() method call để xóa tất cả các hàng khỏi bảng:

Điều đó sẽ không xóa cơ sở dữ liệu nhưng bạn có thể xóa từng bảng. Một cái gì đó như sau:

TableUtils.clearTable (getConnectionSource(), YourClassHere.class);

Edit:

@ max4ever chỉ ra rằng context.deleteDatabase(...) là nhanh hơn rất nhiều so với những cách khác thanh toán bù trừ một cơ sở dữ liệu. Nhưng cuộc gọi này sẽ xóa các định nghĩa bảng trong khi TableUtils.clearTable(...) để nguyên lược đồ.

+0

cảm ơn bạn đã làm việc –

+2

điều này rất chậm, mất khoảng 30 giây trên 10 bảng, context.deleteDatabase là ngay lập tức – max4ever

+0

@Gray 'context.deleteDatabase (...)' xóa tất cả dữ liệu của cơ sở dữ liệu và đây là sự khác biệt với 'TableUtils.clearTable' đúng rồi? –

5

Bạn có thể gọi

context.deleteDatabase(DATABASE_NAME); 

trong lớp DatabaseHelper của bạn kéo dài OrmLiteSqliteOpenHelper. context được chuyển đến lớp DatabaseHelper trong hàm tạo.

Lần sau cơ sở dữ liệu là cần thiết, nó được tái tạo và

@Override 
public void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) 

được gọi.

+0

cảm ơn julia –

+3

nếu tôi sử dụng điều này, thì ormLite không thấy thay đổi và tôi phải giết và mở lại ứng dụng để xem, có cách nào đó buộc ormLite làm mới và thấy không có db nó sẽ tạo lại nó? – max4ever

+0

Tôi chạy vào cùng một vấn đề: tệp đã bị xóa, nhưng dữ liệu vẫn còn trong bộ nhớ. Tôi đã cố gắng 'null'ing các DAO để avail không có. Tôi đã suy nghĩ nếu có thể gọi 'close()' sẽ giúp đỡ, nhưng tôi đoán rằng sẽ mess quá nhiều với các loại tài liệu tham khảo đếm 'OpenHelperManager.getHelper()' và '.releaseHelper()'? – Sebastian

3

Để xóa cơ sở dữ liệu sử dụng các lệnh này:

this.connectionSource.close(); 
context.deleteDatabase(DATABASE_NAME); 

Để tái tạo/mở cơ sở dữ liệu hiện nay sử dụng các lệnh này:

SQLiteDatabase db = context.openOrCreateDatabase(DATABASE_NAME, 0, null); 
this.connectionSource = new AndroidConnectionSource(db); 

Bạn sẽ phải giữ một tham chiếu đến bối cảnh trong cơ sở dữ liệu của bạn người giúp đỡ.

Các vấn đề liên quan