2010-11-09 39 views
10

Tôi có một số câu hỏi chung về bản cập nhật ứng dụng iphone liên quan đến db sqlite.sqlite DB cần làm trong khi cập nhật ứng dụng iphone

  1. Với bản cập nhật mới, db sqlite hiện tại sẽ bị ghi đè bằng bản sao mới?

  2. Nếu bản cập nhật không liên quan đến bất kỳ thay đổi lược đồ nào thì người dùng sẽ có thể sử dụng lại cơ sở dữ liệu hiện có cùng với dữ liệu đã lưu của họ, đúng không? (nếu cơ sở dữ liệu hiện tại không bị ghi đè từ 1 ở trên)

  3. Nếu có một số thay đổi lược đồ, cách tốt nhất để chuyển dữ liệu từ cơ sở dữ liệu cũ sang cơ sở dữ liệu mới là gì? Có thể một số xin vui lòng cho tôi hướng dẫn và mã mẫu?

+0

Câu trả lời tuyệt vời khác: http://developer.appcelerator.com/question/127927/will-app-store-update-force-update-of-the-sqlite-database-too# – OneWorld

Trả lời

20
  1. Chỉ các tệp trong gói ứng dụng được thay thế. Nếu tệp cơ sở dữ liệu nằm trong thư mục Documents của ứng dụng, nó sẽ không được thay thế. (Lưu ý rằng nếu bạn thay đổi các tệp bên trong gói ứng dụng, chữ ký mã sẽ không còn hợp lệ nữa và ứng dụng sẽ không khởi chạy. Vì vậy, trừ khi bạn đang sử dụng cơ sở dữ liệu chỉ đọc, nó sẽ phải nằm trong thư mục Documents).

  2. Có.

  3. Điều gì là tốt nhất tùy thuộc vào dữ liệu. Bạn sẽ không tìm thấy mã mẫu cho một câu hỏi chung chung như vậy. Trước tiên, bạn cần phải phát hiện rằng ứng dụng của bạn đang chạy với phiên bản DB cũ. Sau đó, bạn cần phải nâng cấp nó.

Để kiểm tra phiên bản:

  • Bạn có thể sử dụng một tên tập tin khác nhau cho các giản đồ mới. Nếu Version2.db không tồn tại nhưng Version1.db thực hiện, hãy nâng cấp.
  • Bạn có thể nhúng phiên bản giản đồ trong cơ sở dữ liệu của mình. Tôi có một bảng có tên là metadata với cột namevalue. Tôi sử dụng nó để lưu trữ một số giá trị chung, bao gồm một số dataversion. Tôi kiểm tra con số đó khi tôi mở cơ sở dữ liệu, và nếu nó nhỏ hơn phiên bản hiện tại, tôi thực hiện nâng cấp.
  • Thay vì tạo bảng, bạn cũng có thể sử dụng sốđược tích hợp sẵn của sqlite để kiểm tra và lưu trữ số phiên bản.
  • Bạn có thể kiểm tra cấu trúc bảng trực tiếp: tìm kiếm sự tồn tại của một cột hoặc bảng.

Để nâng cấp:

  • Bạn có thể nâng cấp tại chỗ bằng cách sử dụng một loạt các lệnh SQL. Bạn thậm chí có thể lưu trữ một tệp SQL bên trong gói ứng dụng của mình dưới dạng tài nguyên và chỉ cần chuyển nó theo số sqlite3_exec để thực hiện tất cả công việc. (Thực hiện điều này bên trong một giao dịch, trong trường hợp có vấn đề!)
  • Bạn có thể nâng cấp bằng cách sao chép dữ liệu từ một tệp cơ sở dữ liệu sang tệp cơ sở dữ liệu mới.

Nếu nâng cấp của bạn có thể chạy lâu (hơn một giây), bạn sẽ hiển thị màn hình nâng cấp, để giải thích cho người dùng những gì đang diễn ra.

+2

Lưu ý nhỏ về kiểm tra phiên bản: thay vì sử dụng bảng riêng cho phiên bản lược đồ, bạn cũng có thể sử dụng pragma "user_version" được tích hợp sẵn (http://www.sqlite.org/pragma.html#pragma_schema_version). –

+0

Ồ, tuyệt! Tôi ước tôi đã biết về điều đó. Sẽ chỉnh sửa câu trả lời của tôi. – benzado

+0

Cảm ơn bạn đã giải thích chi tiết ... – iOSAppDev

1

1) Tệp cơ sở dữ liệu không được lưu trữ như một phần của gói ứng dụng nên không, nó sẽ không tự động bị ghi đè.

2) Có - tất cả dữ liệu của họ sẽ được lưu. Trong thực tế, cơ sở dữ liệu sẽ không bị xúc động chút nào bởi bản cập nhật.

3) Đây là phần phức tạp - đọc this fantastically interesting document - đặc biệt là phần di chuyển nhẹ - nếu thay đổi giản đồ của bạn nhỏ và tuân theo một bộ quy tắc nhất định, chúng sẽ tự động xảy ra và người dùng sẽ không nhận thấy. tuy nhiên, nếu có những thay đổi lớn đối với lược đồ, bạn sẽ phải viết mã di chuyển của riêng mình (cũng có trong các liên kết đó)

Tôi luôn xoay xở để tránh việc di chuyển nhẹ - bản thân dễ dàng hơn nhiều so với tự mình làm.

+1

Chỉ liên kết trong # 3 áp dụng cho việc sử dụng Dữ liệu cốt lõi. Câu hỏi có vẻ là về việc sử dụng SQLite trực tiếp. – benzado

+0

tài liệu đề cập đến việc di chuyển dữ liệu bằng cách sử dụng dữ liệu cốt lõi ... Tôi đang tìm một thứ như chuyển dữ liệu trực tiếp từ sqlite db (db mới) từ sqlite db (hiện có với dữ liệu người dùng) – ArdenDev

0

Điều tôi làm là tạo bản sao làm việc của cơ sở dữ liệu trong thư mục Tài liệu. Bản sao chính đi kèm với gói. Khi tôi cập nhật ứng dụng, tôi có tùy chọn tạo bản sao mới trên bản sao làm việc hoặc để lại.

+0

nếu bạn cần chuyển dữ liệu sang sao chép? có bất kỳ tập lệnh di chuyển mẫu nào bạn có thể chỉ cho tôi không? – ArdenDev

+0

Tôi thường chạy hai cơ sở dữ liệu, một cơ sở dữ liệu tĩnh giữ tất cả các bảng tương đối tĩnh và một bảng động. Vì vậy, di chuyển nói chung không phải là một vấn đề bởi vì tôi chỉ cập nhật cơ sở dữ liệu cần thiết. Di chuyển không phải là một vấn đề. –

Các vấn đề liên quan