2009-02-16 39 views
9

Tôi đang sử dụng sqlite làm nguồn dữ liệu trong ứng dụng iPhone. Tôi có hai câu hỏi liên quan đến nâng cấp ứng dụng.Triển khai sqlite DB khi nâng cấp ứng dụng iPhone

1.) Dữ liệu là tất cả cấu hình/không giao dịch. Có nghĩa là, nó là chỉ đọc. Khi tôi cập nhật/thêm dữ liệu cấu hình, tôi sẽ phát hành bản nâng cấp cho ứng dụng. Khi người dùng nhận được một ứng dụng iPhone được cập nhật, bản gốc có được gỡ cài đặt không? Nếu đúng như vậy, tôi ổn vì dữ liệu cấu hình db mới sẽ được triển khai. Nếu đó không phải là trường hợp, làm cách nào để thay thế dữ liệu?

2.) Dữ liệu được định cấu hình và giao dịch. Có nghĩa là người dùng có thể lưu dữ liệu vào db. Khi người dùng nâng cấp lên phiên bản ứng dụng mới, tôi muốn duy trì dữ liệu hiện có của họ nhưng thay thế tất cả dữ liệu cấu hình. Tôi đoán tôi cần phải có các kịch bản INSERT và UPDATE được lưu trữ trong ứng dụng để thực hiện việc này. Một cách hiệu quả để đi về nó là gì?

+0

Bạn đang nói rằng bạn đang cài đặt MySQL trên iPhone? Tôi nghiêm túc nghi ngờ rằng có thể làm việc. Hay bạn đang nói rằng iPhone đang truy vấn một cơ sở dữ liệu MySQL trên một máy chủ ở đâu đó? –

+0

Có - mysql nằm trên iPhone, đây là một kịch bản phổ biến. Để rõ ràng, câu hỏi dành cho nhà phát triển iPhone. – 4thSpace

+0

SQLite là một kịch bản phổ biến trên iPhone (nó được tích hợp sẵn). Sử dụng MySQL là các loại hạt. –

Trả lời

11

cdespinosa đã mô tả kịch bản # 1 tốt, vì vậy tôi sẽ giải quyết # 2.

Tôi chưa làm điều này trên iPhone, nhưng trên môi trường máy tính để bàn, cách dễ nhất để xử lý việc này là giữ dữ liệu cấu hình của bạn trong cơ sở dữ liệu riêng biệt. Bạn có thể đính kèm vào nhiều cơ sở dữ liệu khá dễ dàng. Bắt đầu bằng cách mở cơ sở dữ liệu chính của bạn, có lẽ đó là cơ sở dữ liệu có thể thay đổi. Sau đó sqlite3_exec một tuyên bố ATTACH, trông như thế này:

ATTACH 'filepath' AS config; 

Từ đó trở đi, bạn có thể làm một cái gì đó như thế này:

SELECT * FROM UserTableName; 
SELECT * FROM config.ConfigurationTableName; 

Đó là sự hiểu biết của tôi rằng nếu bạn viết thư cho cơ sở dữ liệu cấu hình ứng dụng sẽ không kiểm tra chữ ký và sẽ không bắt đầu, và phiên bản SQLite đi kèm với iPhone đủ lớn để không hỗ trợ cờ chỉ đọc. Vì lý do này, bạn nên sao chép tệp cơ sở dữ liệu cấu hình của mình vào hộp cát và mở bản sao đó thay vì bản sao trong gói của bạn.

(Bạn có thể sử dụng SQL và sao chép các giá trị từ cơ sở dữ liệu này sang cơ sở dữ liệu khác. Nhưng nếu bạn đã sao chép toàn bộ cơ sở dữ liệu cấu hình vào hộp cát của mình ... và bạn nên ... thêm một bước. Chỉ cần đính kèm.)

Tôi hy vọng người khác có thể cung cấp cho bạn thêm chi tiết. :)

5

Khi người dùng nâng cấp ứng dụng, gói ứng dụng cũ đã được gỡ cài đặt và gói ứng dụng mới được cài đặt nhưng dữ liệu người dùng được liên kết với gói ứng dụng vẫn còn nguyên vẹn.

Vì vậy, lựa chọn của bạn là a) để dữ liệu của bạn trong gói ứng dụng (nó sẽ được thay thế tự động) hoặc b) đơn phương sao chép nó vào vùng dữ liệu người dùng trong lần chạy đầu tiên (vì vậy bạn sẽ cố ý thay thế nó khi nâng cấp).

Tôi sẽ để # 2 cho một người hiểu biết về sqlite, nhưng bạn có thể muốn sử dụng thẻ "sqlite" thay vì thẻ "mysql" nếu đó là những gì bạn đang thực sự làm.

+0

Yep - đã cập nhật thẻ. Tôi không nghĩ rằng lựa chọn một công trình vì người dùng cũng đã tích lũy dữ liệu vào thời điểm anh/cô ấy sẵn sàng nâng cấp. Nếu tôi chọn lựa chọn b, thì sao chép db từ nếu không phải là gói?Ngoài ra, tôi không thể "thay thế" dữ liệu người dùng. Chỉ cấu hình dữ liệu (không phải người dùng). Cảm ơn. – 4thSpace

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