Để thêm các điểm còn thiếu ở đây, theo yêu cầu của Jaskey
Phiên bản cơ sở dữ liệu được lưu trữ trong SQLite
tệp cơ sở dữ liệu.
bắt là người xây dựng
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Vì vậy, khi trình xây dựng trình trợ giúp cơ sở dữ liệu được gọi bằng name
(param 2), nền tảng sẽ kiểm tra xem cơ sở dữ liệu có tồn tại hay không và nếu cơ sở dữ liệu tồn tại, nó sẽ lấy thông tin phiên bản từ tiêu đề tệp cơ sở dữ liệu và kích hoạt lại cuộc gọi đúng
Như đã giải thích trong câu trả lời cũ hơn, nếu cơ sở dữ liệu với tên không tồn tại, nó sẽ kích hoạt onCreate
.
Dưới đây giải thích onUpgrade
trường hợp với một ví dụ.
Giả sử, phiên bản ứng dụng đầu tiên của bạn có (phiên bản DatabaseHelper
mở rộng SQLiteOpenHelper
) với phiên bản chuyển qua hàm tạo 1
và sau đó bạn đã cung cấp một ứng dụng được nâng cấp với mã nguồn mới có phiên bản được chuyển qua 2
, sau đó tự động khi DatabaseHelper
được xây dựng, kích hoạt nền tảng onUpgrade
bằng cách thấy tệp đã tồn tại, nhưng phiên bản thấp hơn phiên bản hiện tại mà bạn đã vượt qua.
Bây giờ hãy nói rằng bạn đang dự định cung cấp phiên bản ứng dụng thứ ba với phiên bản db vì 3
(phiên bản db chỉ được tăng lên khi lược đồ cơ sở dữ liệu được sửa đổi). Trong các nâng cấp gia tăng như vậy, bạn phải viết logic nâng cấp từ mỗi phiên bản tăng dần để có mã duy trì tốt hơn
Ví dụ mã giả dưới đây:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
Lưu ý các break
tuyên bố còn thiếu trong trường hợp 1
và 2
. Đây là những gì tôi có nghĩa là bằng cách nâng cấp gia tăng.
Nói nếu phiên bản cũ là 2
và phiên bản mới 4
, thì logic sẽ nâng cấp cơ sở dữ liệu từ 2
đến 3
và sau đó thành4
Nếu phiên bản cũ là 3
và phiên bản mới 4
, nó sẽ chỉ chạy logic nâng cấp cho 3
tới4