2009-02-16 17 views
9

मैं एक आईफोन ऐप में डेटाक्साइट के रूप में स्क्लाइट का उपयोग कर रहा हूं। मेरे पास एप्लिकेशन अपग्रेड के संबंध में दो प्रश्न हैं।आईफोन ऐप अपग्रेड पर स्क्लाइट डीबी को तैनात करना

1.) डेटा सभी कॉन्फ़िगरेशन/nontransactional है। मतलब, यह केवल पढ़ने के लिए है। जब मैं कॉन्फ़िगर डेटा अपडेट/जोड़ता हूं, तो मैं ऐप के लिए अपग्रेड जारी करूंगा। जब कोई उपयोगकर्ता एक अद्यतन आईफोन ऐप प्राप्त करता है, तो क्या मूल अनइंस्टॉल हो जाता है? यदि ऐसा है, तो मैं ठीक हूं क्योंकि नया डीबी कॉन्फ़िगरेशन डेटा तैनात किया जाएगा। यदि ऐसा नहीं है, तो मैं डेटा को कैसे बदलूं?

2.) डेटा कॉन्फ़िगर और लेनदेन है। मतलब उपयोगकर्ता उपयोगकर्ता को डीबी में सहेज सकता है। जब उपयोगकर्ता ऐप के नए संस्करण में अपग्रेड करता है, तो मैं अपने मौजूदा डेटा को बनाए रखना चाहता हूं लेकिन सभी कॉन्फ़िगरेशन डेटा को प्रतिस्थापित करना चाहता हूं। मुझे लगता है कि इसे पूरा करने के लिए मुझे ऐप के अंदर संग्रहीत INSERT और अद्यतन स्क्रिप्ट्स की आवश्यकता होगी। इसके बारे में जाने का एक प्रभावी तरीका क्या है?

+0

क्या आप कह रहे हैं कि आप आईफोन पर MySQL इंस्टॉल कर रहे हैं? मुझे गंभीरता से संदेह है कि काम कर सकता है। या आप कह रहे हैं कि आईफोन कहीं सर्वर पर एक MySQL डेटाबेस से पूछताछ कर रहा है? –

+0

हां - mysql आईफोन पर है, जो एक आम परिदृश्य है। स्पष्ट होने के लिए, सवाल आईफोन डेवलपर्स के लिए है। – 4thSpace

+0

SQLite एक आईफोन पर एक आम परिदृश्य है (यह निर्मित है)। MySQL का उपयोग पागल है। –

उत्तर

11

सीडीएसपीनोसा ने परिदृश्य # 1 अच्छी तरह से वर्णन किया है, इसलिए मैं # 2 से निपटूंगा।

मैंने अभी तक आईफोन पर ऐसा नहीं किया है, लेकिन डेस्कटॉप वातावरण पर इसे संभालने का सबसे आसान तरीका है अपने कॉन्फ़िगरेशन डेटा को एक अलग डेटाबेस में रखना। आप आसानी से कई डेटाबेस से संलग्न कर सकते हैं। अपना मुख्य डेटाबेस खोलकर शुरू करें, जो शायद डेटाबेस हो सकता है जो बदल सकता है। तब sqlite3_exec एक ATTACH बयान है, जो इस प्रकार है:

ATTACH 'filepath' AS config; 

तब से, आप कुछ इस तरह कर सकते हैं:

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

यह मेरी समझ है कि यदि आप विन्यास डेटाबेस के लिए आवेदन लिखेंगे एक हस्ताक्षर जांच में असफल हो और शुरू नहीं होगा, और आईफोन के साथ शामिल SQLite का संस्करण पुराना है केवल पढ़ने के ध्वज का समर्थन नहीं करने के लिए पुराना है। इस कारण से, आपको अपनी कॉन्फ़िगरेशन डेटाबेस फ़ाइल को सैंडबॉक्स में कॉपी करनी चाहिए और उस प्रतिलिपि को अपने बंडल में खोलना चाहिए।

(आप निश्चित रूप से, एसक्यूएल का उपयोग कर सकते हैं और मानों को एक डेटाबेस से दूसरे में कॉपी कर सकते हैं। लेकिन यदि आप पहले से ही संपूर्ण कॉन्फ़िगरेशन डेटाबेस को अपने सैंडबॉक्स में कॉपी कर रहे हैं ... और आपको होना चाहिए ... तो यह बस है एक अतिरिक्त कदम। बस संलग्न करें।)

मुझे उम्मीद है कि कोई और आपको अधिक जानकारी प्रदान कर सकता है। :)

5

जब उपयोगकर्ता ऐप को अपग्रेड करता है, तो पुराना ऐप बंडल अनइंस्टॉल किया जाता है और नया ऐप बंडल स्थापित होता है, लेकिन ऐप बंडल से जुड़े उपयोगकर्ता डेटा बरकरार है।

तो आपके विकल्प ए हैं) अपने डेटा को ऐप बंडल में छोड़ दें (इसे स्वचालित रूप से बदला जाएगा) या बी) इसे एकतरफा रूप से पहले उपयोगकर्ता डेटा क्षेत्र में कॉपी करें (इसलिए आप जानबूझकर इसे अपग्रेड पर बदल देंगे)।

मैं एक स्क्लाइट-जानकार व्यक्ति के लिए # 2 छोड़ दूंगा, लेकिन यदि आप वास्तव में ऐसा कर रहे हैं तो आप "mysql" टैग के बजाय "स्क्लाइट" टैग का उपयोग करना चाहेंगे।

+0

हाँ - टैग को अपडेट किया गया। मुझे लगता है कि पसंद एक काम नहीं करता है क्योंकि उपयोगकर्ता ने अपग्रेड करने के लिए तैयार होने तक डेटा जमा किया है। यदि मैं पसंद बी चुनता हूं, तो बंडल नहीं होने पर डीबी की प्रतिलिपि बनाई गई है?इसके अलावा, मैं उपयोगकर्ता डेटा को "प्रतिस्थापित नहीं कर सकता"। केवल कॉन्फ़िगर (गैर उपयोगकर्ता) डेटा। धन्यवाद। – 4thSpace

संबंधित मुद्दे