Có cách nào để thực hiện di chuyển giản đồ cơ sở dữ liệu trên Android không? Ví dụ: người dùng cài đặt phiên bản mới hơn của ứng dụng Android của tôi nhưng phiên bản mới cần cập nhật lược đồ cơ sở dữ liệu (và xóa cơ sở dữ liệu của người dùng và bắt đầu lại không phải là một tùy chọn!). Vì vậy, tôi cần phải chạy một số báo cáo ALTER và/hoặc sao chép bảng lần đầu tiên phiên bản mới của tôi chạy.Làm cách nào để di chuyển giản đồ cơ sở dữ liệu trong Android?
Trả lời
Có SQLiteOpenHelper có hỗ trợ di chuyển giữa các phiên bản khác nhau của lược đồ DB.
Nâng cấp được thực hiện bằng cách thực hiện
public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)
Và nhạc Rolling trở lại một phiên bản trước cũng được hỗ trợ:
public abstract void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)
Với một chút suy nghĩ, bạn gần như có thể tự động thực hiện rất nhiều các SQLiteOpenHelper phương pháp. Hãy xem bài đăng trên blog này http://www.greenmoonsoftware.com/2012/02/sqlite-schema-migration-in-android/
Cập nhật: Tôi gặp phải một số vấn đề nếu cập nhật cơ sở dữ liệu mất một lúc để hoàn thành. Hãy xem bài viết blog này để biết cách triển khai phù hợp với tôi. http://www.greenmoonsoftware.com/2012/05/android-developer-how-to-safely-update-the-application-database/
Tôi biết điều này là cũ nhưng tôi đã phát triển một plugin eclipse nguồn mở là ngôn ngữ cụ thể của miền (DSL được viết bằng XText) cho phép bạn chỉ định cơ sở dữ liệu làm danh sách di chuyển.
Nó tạo ContentProvider, SqliteOpenHelper và hợp đồng cho bạn, vào một API giống như một API như API liên hệ hoặc API truyền thông.
Tôi đã viết một hướng dẫn cơ bản giúp bạn bắt đầu ở đây http://robotoworks.com/mechanoid-plugin/mechanoid-db/
Cho đến nay nó hỗ trợ tạo bảng, tạo xem và thay đổi bảng báo cáo, tôi hy vọng sẽ thực hiện đầy đủ cú pháp Sqlite nơi thích hợp cho DSL này.
Hy vọng rằng sẽ giúp và xin lỗi vì spam! :)
Câu trả lời của yanchenko là chính xác, tuy nhiên, bạn có thể muốn xem Droid Migrate, là khung tôi đã sử dụng rộng rãi SQLiteOpenHelper
để tạo điều kiện tự động chuyển SQLite (giống như cách Rails thực hiện).
Đến từ một nền đường ray, điều này có vẻ tuyệt vời! Mối quan tâm duy nhất của tôi là nó vẫn tích cực duy trì? Cam kết cuối cùng là khoảng 2 năm trước .. – aandis
Tất cả các câu trả lời ở trên liên quan đến SQLiteOpenHelper là chính xác, nhưng tất cả đều chứa một loại mẫu mã - tạo/sửa đổi cấu trúc DB bằng chuỗi. Nó làm cho cả hai phát triển và bảo trì đắt tiền hơn. Đôi khi việc di chuyển bao gồm nhiều phát biểu, một số có thể khá lớn. Viết chúng thành Strings, không có bất kỳ cú pháp nào, ... cho các cấu trúc nhỏ, nó có thể hoạt động, nhưng đối với một số cấu trúc lớn hơn thì nó sẽ là một cơn ác mộng. Một cách tốt hơn để quản lý các thay đổi lược đồ sẽ là giữ cho mỗi tập lệnh di chuyển trong tệp bên ngoài và làm cho phương thức onUpgrade của SQLiteOpenHelper thực thi chúng một cách tự động theo đúng thứ tự. Đây là một bài viết đề cập đến chủ đề này: http://www.vertabelo.com/blog/sqlite-on-android-handling-database-structure-changes. Tôi hi vọng cái này giúp được.
Kể từ phiên bản 3.0 Flyway hiện hỗ trợ di chuyển cơ sở dữ liệu trên Android. Nó hoạt động với SQLite, nhưng cũng với bất kỳ cơ sở dữ liệu nào khác mà bạn muốn sử dụng (bộ nhớ trong cục bộ hoặc một DB trên máy chủ cho các ứng dụng hai tầng).
Di chuyển có thể được viết bằng cả SQL và Java.
Tôi thấy nó hơi phức tạp để Flyway tìm thấy những di chuyển trên Android. Di chuyển phải nằm trong thư mục nội dung không được tạo theo mặc định với các dự án Android Studio mới. Ngoài ra, Android sẽ không hỗ trợ Di chuyển (hoặc các nội dung khác) trong tệp Jar. Tôi giải quyết sự cố nếu dự án Jar nằm trong cùng một Dự án Android Studio, là đặt một cái gì đó như thế này trong gradle.build: sourceSets {main {assets.srcDirs = ['../library/src/main/resources/' ]}} –
@JohannesBrodwall Chúng tôi chắc chắn sẽ chào đón một yêu cầu kéo để cải thiện điều này, nếu bạn có một giải pháp tốt hơn mà sẽ làm việc ra khỏi hộp. –
Tôi nghĩ rằng nơi duy nhất mà nó có thể được cải thiện là tài liệu hướng dẫn. Nó hoạt động tốt, nhưng nó đã cho tôi một thời gian để tìm ra. Tôi không thể tìm thấy tài liệu Android tại http://flywaydb.org/documentation/ –
Bạn có thể nâng cao mặc định SQLiteOpenHelper
bằng thư viện Android-Migrator, cho phép bạn áp dụng di chuyển từ sql
tệp trong thư mục android assets
.
- 1. Làm cách nào để di chuyển/cập nhật lược đồ cơ sở dữ liệu trong Grails?
- 2. Làm cách nào để di chuyển Sơ đồ cơ sở dữ liệu SQL Server sang cơ sở dữ liệu khác?
- 3. Meteor cách thực hiện di chuyển cơ sở dữ liệu?
- 4. Di chuyển giản đồ cơ sở dữ liệu trên Azure với triển khai Git
- 5. Di chuyển cơ sở dữ liệu MySQL phát triển sang cơ sở dữ liệu sản xuất
- 6. Có công cụ nào để di chuyển lược đồ cho cơ sở dữ liệu NoSQL không?
- 7. Cách di chuyển dữ liệu và cài đặt từ cơ sở dữ liệu này sang cơ sở dữ liệu khác?
- 8. Làm thế nào để di chuyển cơ sở dữ liệu SQL Server sang MySQL?
- 9. Làm cách nào để kiểm tra di chuyển cơ sở dữ liệu?
- 10. Làm cách nào để chuyển dữ liệu giữa 2 cơ sở dữ liệu MySQL?
- 11. Làm cách nào để bạn di chuyển các thay đổi cơ sở dữ liệu Dev sang cơ sở dữ liệu sản xuất?
- 12. Lược đồ cơ sở dữ liệu Sqlite của Android
- 13. Làm thế nào để sao chép cơ sở dữ liệu trong sử dụng cơ sở dữ liệu khác trong django?
- 14. Cơ sở dữ liệu đồ thị nào
- 15. Làm cách nào để chỉ lấy lược đồ cơ sở dữ liệu vào tập dữ liệu?
- 16. Làm cách nào để chuyển đổi hàng cơ sở dữ liệu thành cấu trúc, trong Go?
- 17. Làm thế nào để lưu trữ dữ liệu đồ thị trong cơ sở dữ liệu?
- 18. Rails + PostGIS lỗi di chuyển cơ sở dữ liệu
- 19. Cách dễ nhất để di chuyển cơ sở dữ liệu PostgreSQL vào SQL Server
- 20. Di chuyển cơ sở dữ liệu giống như Rails?
- 21. Làm thế nào để khôi phục cơ sở dữ liệu di chuyển trên Heroku
- 22. Làm thế nào để di chuyển cơ sở dữ liệu mysql dễ nhất và nhanh nhất?
- 23. Giản đồ tốt để xóa tệp cơ sở dữ liệu trong SQLiteOpenHelper.onDowngrade()
- 24. Di chuyển bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong MySQL
- 25. Làm cách nào để lưu trữ số điện thoại di động trong cơ sở dữ liệu?
- 26. Tắt Sơ đồ cơ sở dữ liệu trong SSMS
- 27. Làm thế nào để chèn dữ liệu vào cơ sở dữ liệu SQLite trong android?
- 28. Đơn giản hóa Sơ đồ Cơ sở dữ liệu ER/Lược đồ
- 29. Cách viết một cơ sở dữ liệu đơn giản
- 30. Làm cách nào để tôi có thể tạo biểu đồ cơ sở dữ liệu SQL Server?
Vui lòng giải thích chi tiết hơn về điều gì bạn hiểu trong quá trình di chuyển giản đồ? Di chuyển ở đâu? – Pentium10