2012-04-13 12 views
5

के साथ ऐप स्टोर में नया संस्करण अपडेट करना मैंने ऐप स्टोर (संस्करण 1.0) पर एक ऐप अपलोड किया है। मेरा ऐप कुछ डेटा स्टोर करने के लिए एक एसक्लाइट डेटाबेस का उपयोग कर रहा है। अब, मैंने डेटाबेस में कुछ बदलाव किए हैं (मैंने अपने डीबी में टेबल में से एक में 2 या 3 नए कॉलम जोड़े हैं)। मैं अपने ऐप के पिछले संस्करण को नए संस्करण 1.1 (जिसमें विभिन्न डीबी संरचना है) के साथ अद्यतन करना चाहता हूं। अब, जब उपयोगकर्ता पहले से ही संस्करण 1.0 का उपयोग कर रहे हैं, तो ऐप को संस्करण 1.1 में अपग्रेड कर दिया गया है, डीबी ऐप सैंडबॉक्स में पहले से मौजूद है और इसलिए, ऐप संस्करण 1.1 पर इंगित कर रहा है, लेकिन मेरा डीबी अभी भी पुराना है। मैं पुराने डेटा के साथ नया डीबी चाहता हूं, यदि कोई हो। कृपया मेरी मदद करें। धन्यवाद।विभिन्न एसक्लाइट डीबी संरचना

+0

मेरा उत्तर यहां देखें: http://stackoverflow.com/a/9851554/108574 डेटाबेस उन्नयन रणनीति के लिए। –

+0

@HeShiming धन्यवाद दोस्त। लेकिन मैंने ऐप स्टोर पर संस्करण 1.0 पहले ही अपलोड कर लिया है और इसमें मेटाडेटा टेबल नहीं है (जैसा कि आपने सुझाव दिया है, डेटाबेस संस्करण को संग्रहीत करने के लिए)। अब, मैं एक नया संस्करण अपलोड करना चाहता हूं और डीबी संरचना में बदलाव आया है। तो, अब मैं इसे कैसे प्राप्त कर सकता हूं? – anshul

+0

अच्छी तरह से विधि अभी भी मान्य है। आपको केवल चयन कथन के वापसी मूल्य की जांच करके मेटाडेटा तालिका के अस्तित्व की जांच करने की आवश्यकता है। फिर यदि यह अस्तित्व में नहीं है, तो एक बनाएं। –

उत्तर

12

sqlite उपयोगकर्ता_वर्जन संपत्ति के रूप में कुछ कहा जाता है, तो आप अपने एप डीबी के वर्तमान स्कीमा संस्करण के लिए क्वेरी करने के लिए PRAGMA user_version निष्पादित कर सकते हैं। यह प्रश्न शुरुआत में लिख सकता है जब आपका ऐप शुरू होता है।

इस उपयोगकर्ता_वर्जन को अद्यतन करने के लिए अद्यतन अद्यतन PRAGMA user_version = version_num;

जब भी आप स्क्लाइट डीबी बनाते हैं, तो यह संपत्ति उपयोगकर्ता_वर्जन को रखने का सबसे अच्छा अभ्यास है, ताकि जब आप भविष्य में अपग्रेड कर रहे हों तो आप वर्तमान मूल्य से पूछ सकते हैं। जांचें कि उसे क्या करना है और शेष स्कीमा संस्करण को अपग्रेड करने के लिए शेष परिवर्तन या तालिकाओं को निष्पादित करना है।

उदाहरण के लिए:

पहली रिलीज में मैं col1 साथ table1 बनाने के लिए, col2

मैं table1 बनाने के लिए एसक्यूएल निष्पादित और एक बार इसे सफलतापूर्वक किया जाता है, मैं pragma user_version निष्पादित = 1. तो यह इंगित करेंगे मेरी वर्तमान स्कीमा संस्करण 1

भविष्य के रिलीज मैं नई col3 जोड़ने में है, मैं, 2

मैं पहली बार क्वेरी user_version करने के लिए अपने स्कीमा संस्करण को बदलने की जरूरत है कि यह मूल्य है की जाँच करें और अगर यह 1 है, तो आप को बदलने चलाने की आवश्यकता जोड़ने के लिए स्क्रिप्ट नया कॉलम और उपयोगकर्ता संस्करण 2.

अपने मामले में, चूंकि आपने पहले उपयोगकर्ता_वर्जन सेट नहीं किया है, इसलिए अपग्रेड परिदृश्य बनाम नए इंस्टॉल को अलग करना मुश्किल होगा। तो अब आप मान सकते हैं कि डीबी मौजूद है या नहीं, यह परिदृश्य को अपग्रेड कर रहा है और स्क्रिप्ट को निष्पादित करता है और यदि नहीं लगता है कि यह एक नया परिदृश्य स्थापित करें और स्क्रिप्ट बनाएं चलाएं। लेकिन देखें कि भविष्य में कम से कम अपनी समस्या को हल करने के लिए आप उपर्युमा का उपयोग कर सकते हैं या नहीं।

+0

डेटाबेस स्कीमा को अद्यतन और बनाए रखने का एक अच्छा तरीका प्रतीत होता है, मैं इसे अत्यधिक कोशिश करूँगा। –

-1

यदि आप पुरानी डीबी है तो आप लॉन्च पर जांच सकते हैं, और यदि नई संरचना (अस्थायी नाम के साथ) के साथ एक नया डीबी बनाने के लिए नियमित है, तो पुराने से नए डेटा को कॉपी करें, बंद करें पुराना डीबी & इसे हटाएं, नया डीबी बंद करें, इसका नाम बदलें, फिर अंत में अपने अपडेट किए गए ऐप का उपयोग करने के लिए इसे फिर से खोलें। आसान, तेज़, & आपको ऐसा करने के लिए SQLite के गहन ज्ञान की आवश्यकता नहीं है।

+0

लेकिन मैं यह केवल तभी करना चाहता हूं जब उपयोगकर्ता 1.0 से 1.1 तक अपग्रेड हो। जिस दृष्टिकोण को आप बता रहे हैं उसे ऐप प्रतिनिधि में ऐपडिडफिनिश लॉन्चिंग विधि में कार्यान्वित किया जाएगा और इस प्रकार, जब भी मैं अपना ऐप लॉन्च करता हूं तो कोड की इस पंक्ति को निष्पादित किया जाएगा। सही??? तो, मुझे स्क्लाइट डेटाबेस की संस्करण संख्या की तरह कुछ चाहिए। – anshul

+0

ऐसा नहीं - आपको बस यह जांचने की आवश्यकता है कि डीबी नई संरचना है या नहीं – SomaMan

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