SQLiteOpenHelper
onCreate()
và onUpgrade()
lệnh gọi lại được gọi khi cơ sở dữ liệu thực sự được mở, ví dụ:bằng lệnh gọi tới getWritableDatabase()
. Cơ sở dữ liệu không được mở khi bản thân đối tượng trợ giúp cơ sở dữ liệu được tạo.
SQLiteOpenHelper
phiên bản của các tệp cơ sở dữ liệu. Số phiên bản là int
đối số được truyền cho hàm tạo. Trong tệp cơ sở dữ liệu, số phiên bản được lưu trữ trong PRAGMA user_version
.
onCreate()
chỉ được chạy khi tệp cơ sở dữ liệu không tồn tại và mới được tạo. If onCreate()
trả về thành công (không ném ra ngoại lệ), cơ sở dữ liệu được giả định là được tạo với số phiên bản được yêu cầu. Theo ngụ ý, bạn không nên bắt SQLException
s trong onCreate()
bản thân bạn.
onUpgrade()
chỉ được gọi khi tệp cơ sở dữ liệu tồn tại nhưng số phiên bản được lưu trữ thấp hơn yêu cầu trong phương thức khởi tạo. onUpgrade()
nên cập nhật giản đồ bảng lên phiên bản được yêu cầu.
Khi thay đổi lược đồ bảng trong mã (onCreate()
), bạn nên đảm bảo rằng cơ sở dữ liệu được cập nhật. Hai cách tiếp cận chính:
-
Xóa tệp cơ sở dữ liệu cũ để
onCreate()
được chạy lại. Điều này thường được ưu tiên tại thời điểm phát triển khi bạn có quyền kiểm soát các phiên bản đã cài đặt và việc mất dữ liệu không phải là vấn đề. Một số cách để xóa tệp cơ sở dữ liệu:-
Gỡ cài đặt ứng dụng. Sử dụng trình quản lý ứng dụng hoặc
adb uninstall your.package.name
từ vỏ. -
Xóa dữ liệu ứng dụng. Sử dụng trình quản lý ứng dụng.
-
-
Tăng phiên bản cơ sở dữ liệu để
onUpgrade()
Được gọi. Điều này hơi phức tạp hơn vì cần nhiều mã hơn.-
Đối với các nâng cấp giản đồ thời gian phát triển trong đó mất dữ liệu không phải là vấn đề, bạn chỉ có thể sử dụng
execSQL("DROP TABLE IF EXISTS <tablename>")
vào để xóa các bảng hiện có của bạn và gọionCreate()
để tạo lại cơ sở dữ liệu. -
Đối với các phiên bản đã phát hành, bạn nên triển khai di chuyển dữ liệu trong
onUpgrade()
để người dùng của bạn không bị mất dữ liệu của họ.
-