Tôi đã tải lên ứng dụng trên cửa hàng ứng dụng (phiên bản 1.0). Ứng dụng của tôi đang sử dụng cơ sở dữ liệu sqlite để lưu trữ một số dữ liệu. Bây giờ, tôi đã thực hiện một số thay đổi trong cơ sở dữ liệu (tôi đã thêm 2 hoặc 3 cột mới vào một trong các bảng trong db của tôi). Tôi muốn cập nhật phiên bản trước của ứng dụng của mình bằng phiên bản 1.1 mới (có cấu trúc db khác). Bây giờ, khi người dùng đã sử dụng phiên bản 1.0 nâng cấp ứng dụng lên phiên bản 1.1, thì db đã có trong hộp cát ứng dụng và do đó, ứng dụng đang trỏ tới phiên bản 1.1, nhưng db của tôi vẫn là phiên bản cũ. Tôi muốn có db mới với dữ liệu cũ, nếu có. Hãy giúp tôi ra. Cảm ơn.Cập nhật phiên bản mới cho cửa hàng ứng dụng với cấu trúc db sqlite khác nhau
Trả lời
sqlite hỗ trợ điều gì đó được gọi là thuộc tính user_version, bạn có thể thực thi PRAGMA user_version
để truy vấn phiên bản lược đồ hiện tại của db ứng dụng của bạn. Truy vấn này có thể xảy ra khi viết ngay từ đầu khi ứng dụng của bạn bắt đầu.
để cập nhật user_version này thực thi truy vấn cập nhật sau PRAGMA user_version = version_num
;
Bất cứ khi nào bạn tạo db sqlite, cách tốt nhất là đặt thuộc tính user_version này, để khi bạn nâng cấp trong tương lai, bạn có thể truy vấn giá trị hiện tại. Kiểm tra xem nó cần gì và thực thi các thay đổi còn lại hoặc tạo các bảng để nâng cấp phiên bản lược đồ của bạn.
Ví dụ:
Trong phiên bản đầu tiên tôi tạo table1 với col1, col2
tôi thực hiện sql để tạo table1 và một khi nó được thực hiện thành công, tôi thực hiện pragma user_version = 1. vì vậy đây sẽ chỉ ra tôi phiên bản giản đồ hiện nay là 1
Trong phiên bản tương lai tôi thêm col3 mới, tôi cần phải thay đổi phiên bản giản đồ của tôi để 2
đầu tiên tôi user_version truy vấn, kiểm tra giá trị của nó và nếu nó là 1, sau đó bạn cần phải chạy thay đổi kịch bản để thêm cột mới và đặt phiên bản người dùng thành 2.
Trong trường hợp của bạn, vì bạn chưa đặt user_version trước đây, sẽ rất khó để phân biệt cài đặt mới so với kịch bản nâng cấp. Vì vậy, bây giờ có thể bạn giả sử nếu db là hiện tại nó là kịch bản nâng cấp và thực thi các kịch bản thay đổi và nếu không có giả định nó là một kịch bản mới cài đặt và chạy tạo tập lệnh. Nhưng hãy xem liệu bạn có thể sử dụng pragma trên để giải quyết vấn đề của mình trong tương lai không.
có vẻ là một cách hay để cập nhật và duy trì lược đồ cơ sở dữ liệu, tôi sẽ cố gắng thử điều này. –
Bạn có thể kiểm tra khi khởi chạy nếu đó là db cũ và nếu có thói quen tạo db mới với cấu trúc mới (với tên tạm thời), sao chép tất cả dữ liệu từ cũ sang mới, đóng db cũ & xóa nó, đóng db mới, đổi tên nó, sau đó cuối cùng mở nó một lần nữa cho ứng dụng cập nhật của bạn để sử dụng. Dễ dàng, nhanh chóng, & bạn không cần kiến thức chuyên sâu về SQLite để làm điều đó.
Nhưng tôi muốn làm điều này chỉ khi người dùng đã nâng cấp từ 1.0 lên 1.1. Cách tiếp cận bạn đang nói sẽ được thực hiện trong phương thức appDidFinishLaunching trong ủy nhiệm ứng dụng và do đó, các dòng mã này sẽ được thực thi mỗi lần tôi khởi chạy ứng dụng của mình. Đúng??? Vì vậy, tôi cần một cái gì đó giống như số phiên bản của cơ sở dữ liệu sqlite. – anshul
Không phải như vậy - bạn chỉ cần kiểm tra xem db có phải là cấu trúc mới hay không – SomaMan
- 1. Ứng dụng iPhone Cập nhật phiên bản mới
- 2. Không thể xuất bản phiên bản ứng dụng đã cập nhật trong Cửa hàng Google Play
- 3. Tải bản cập nhật của ứng dụng lên cửa hàng ứng dụng!
- 4. Hành vi ứng dụng iOS sau khi cài đặt phiên bản mới từ cửa hàng ứng dụng
- 5. Cập nhật các phiên bản cơ sở dữ liệu sqlite?
- 6. Ứng dụng iPhone - cho thấy rằng người dùng cập nhật lên phiên bản mới nhất
- 7. sqlite DB cần làm trong khi cập nhật ứng dụng iphone
- 8. Tải xuống ứng dụng cửa hàng ứng dụng phiên bản trước đó của ứng dụng thay vì mới nhất
- 9. Cách đơn giản nhất để kiểm tra phiên bản ứng dụng hiện tại của bạn so với phiên bản mới nhất trong cửa hàng ứng dụng là gì?
- 10. Mã để kiểm tra các bản cập nhật, cài đặt phiên bản mới của ứng dụng
- 11. Triển khai sqlite DB khi nâng cấp ứng dụng iPhone
- 12. Cấu trúc và cấu trúc dữ liệu khác nhau
- 13. Tôi có thể phát hành bản cập nhật cho cửa hàng ứng dụng với "Chỉ xây dựng kiến trúc hoạt động" được đặt thành "Có" không?
- 14. iOS Phát hành bản cập nhật ứng dụng. Giữ dữ liệu người dùng còn nguyên vẹn khi yêu cầu cập nhật DB
- 15. Tái cấu trúc độc đáo với Kiểm soát phiên bản
- 16. cập nhật cơ sở dữ liệu sqlite khi phiên bản ứng dụng thay đổi trên Appstore trong iPhone
- 17. Cấu trúc của các ứng dụng bình
- 18. Giỏ hàng, Phiên hoặc DB?
- 19. cập nhật ứng dụng Android với eclipse
- 20. Cách thêm ứng dụng của tôi vào cửa hàng ứng dụng với hai phiên bản khác nhau (miễn phí và trả phí)
- 21. Cập nhật lên phiên bản mới nhất từ dòng lệnh
- 22. Android: nâng cấp phiên bản DB và thêm bảng mới
- 23. Đóng gói SQLite DB với ứng dụng của tôi
- 24. Cơ sở dữ liệu và bản cập nhật ứng dụng Android SQLite
- 25. Cấu trúc lồng nhau Với Datomic
- 26. Phiên bản mới của một ứng dụng
- 27. Kiến trúc WCF và Evolution, Phiên bản
- 28. Lỗi ứng dụng khi khởi động chỉ với bản cập nhật mới không cài đặt
- 29. Cửa hàng Android SQLite
- 30. Đang cập nhật số phiên bản trong Add/Remove programs cửa sổ
Kiểm tra câu trả lời của tôi ở đây: http://stackoverflow.com/a/9851554/108574 để có chiến lược nâng cấp cơ sở dữ liệu. –
@HeShiming Cảm ơn bạn. Nhưng tôi đã tải lên phiên bản 1.0 trên cửa hàng ứng dụng và nó không có bảng siêu dữ liệu (để lưu trữ phiên bản cơ sở dữ liệu, như bạn đã đề xuất). Bây giờ, tôi muốn tải lên một phiên bản mới và có một sự thay đổi trong cấu trúc db. Vì vậy, làm thế nào tôi có thể đạt được nó ngay bây giờ? – anshul
thì phương pháp vẫn hợp lệ. Bạn chỉ cần kiểm tra sự tồn tại của bảng siêu dữ liệu bằng cách kiểm tra giá trị trả lại của câu lệnh chọn. Sau đó, nếu nó không tồn tại, tạo một. –