SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

SQLiteOpenHelper onCreate () / onUpgrade () chạy khi nào?

SQLiteOpenHelper onCreate()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:

  1. 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.

  2. 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ọi onCreate() để 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ọ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo bảng trong SQLite

  2. SQLiteDatabase android IllegalStateException

  3. Thư viện phòng có thể sao chép db từ thư mục tài sản?

  4. SQLite JSON_REMOVE ()

  5. Chèn hoặc cập nhật SQLite cho Android