2013-06-03 21 views
20

Tôi đã phát triển một ứng dụng Android và phát hành phiên bản 1.0. Ứng dụng chứa cơ sở dữ liệu cục bộ SQLite với 5 bảng.Cơ sở dữ liệu và bản cập nhật ứng dụng Android SQLite

Bây giờ, chúng tôi dự định phát hành phiên bản 2.0 cũng sẽ cập nhật người dùng phiên bản 1.0. Trong phiên bản 2.0, chúng tôi đã bao gồm thêm hai bảng với 5 bảng trước đó, vì vậy 7 bảng bây giờ.

Bây giờ câu hỏi của tôi là, Tất cả người dùng phiên bản 1.0 có một số dữ liệu trong cơ sở dữ liệu cục bộ, Nếu cập nhật phiên bản 2.0, dữ liệu trước đó sẽ bị mất? Nếu có. thì phương pháp thay thế là gì?

+0

nếu bạn thay đổi kiến ​​trúc DB, DB cũ không thể ở lại – thepoosh

+0

@thepoosh Cảm ơn bạn đã trả lời. Nếu tôi không thay đổi kiến ​​trúc DB, nhưng đã cập nhật phiên bản bằng tính năng mới. Trong trường hợp đó? –

+2

thử đọc câu trả lời này: http://stackoverflow.com/a/8627242/1056359 – thepoosh

Trả lời

22

mới Bạn nên đặt tất cả những thay đổi trong phương pháp onUpgrade của bạn, bạn có thể sử dụng mã này:

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    String sql = "ALTER TABLE " + TABLE_SECRET + " ADD COLUMN " + 
    "name_of_column_to_be_added" + " INTEGER"; 
    db.execSQL(sql);   
}   

này cho biết thêm một cột trong cơ sở dữ liệu hiện tại của bạn. Cơ sở dữ liệu của bạn sẽ không mất dữ liệu. Nhắc nhở: onUpgrade sẽ được gọi khi getWriteableDatabase hoặc getReadableDatabase được thi hành và phiên bản cơ sở dữ liệu của bạn khác với phiên bản cũ của bạn.

+0

Chỉ cần làm rõ, TABLE_SECRET là tên bảng. – Rexcirus

1

Bạn có thể thực hiện một số trên SQLiteOpenHelper#onUpgrade, nhận một số dữ liệu cũ. và chèn vào bảng

2

Thay đổi phiên bản db của bạn và thêm hai phương pháp tạo bảng bổ sung trong phương thức onUpgrade(SQLiteDatabase db, int oldVersion, int newVesion) của bạn. Bây giờ các dữ liệu trước đó sẽ không bị mất.

Tôi hy vọng điều này sẽ giúp bạn.