2011-05-11 5 views
7

आईओएस में एसक्लाइट का उपयोग करते समय, अंतिम विवरण कब करना है?आईओएस में एसक्लाइट में अंतिम विवरण कब करना है?

क्या मुझे हर प्रश्न के बाद कथन को अंतिम रूप देने की आवश्यकता है?

रीसेट और अंतिम रूप देने के बीच क्या अंतर है?

यदि मैं रीसेट करता हूं, तो क्या मुझे अंतिम रूप देने की आवश्यकता है?

धन्यवाद।

उत्तर

11

जब आप पूरी तरह से एक बयान के साथ समाप्त कर sqlite3_finalize() फ़ंक्शन का उपयोग करें, क्योंकि या तो आप की तरह निम्नलिखित एक बंद क्वेरी किया:

const char *sql = "SELECT COUNT(*) FROM bonds WHERE molecule=? AND structure=?"; 
sqlite3_stmt *bondCountingStatement; 

unsigned int totalBondCount = 0; 

if (sqlite3_prepare_v2(database, sql, -1, &bondCountingStatement, NULL) == SQLITE_OK) 
{ 
    sqlite3_bind_int(bondCountingStatement, 1, databaseKey); 
    sqlite3_bind_int(bondCountingStatement, 2, numberOfStructureBeingDisplayed); 

    if (sqlite3_step(bondCountingStatement) == SQLITE_ROW) 
    { 
     totalBondCount = sqlite3_column_int(bondCountingStatement, 0); 
    } 
    else 
    { 
    } 
} 
sqlite3_finalize(bondCountingStatement); 

या आप एक तैयार बयान के साथ किया जाता है, तो यह है कि आप ' फिर कभी आवश्यकता नहीं होगी (संभवतः क्योंकि आप एप्लिकेशन से बाहर निकलने पर सफाई कर रहे हैं)।

यदि आपने एक कथन बनाया है जिसे आप बार-बार उपयोग करना चाहते हैं (प्रदर्शन कारणों से, क्योंकि यह एक कथन तैयार करने के लिए उचित रूप से महंगा है), तो आप क्वेरी को रीसेट करने के लिए sqlite3_reset() का उपयोग करें ताकि वह तैयार हो फिर से उपयोग करने के लिए। आप उस मामले में अंतिम रूप देना नहीं चाहते हैं जब तक कि आपने यह निर्णय नहीं लिया है कि आप कभी भी उस कथन का पुन: उपयोग नहीं करना चाहेंगे (फिर, आमतौर पर यह आपके आवेदन के टियरडाउन या किसी विशेष ऑब्जेक्ट के दौरान होता है)।

sqlite3_bind_text(insertMoleculeSQLStatement, 1, [filename UTF8String], -1, SQLITE_TRANSIENT); 
int success = sqlite3_step(insertMoleculeSQLStatement); 

// Because we want to reuse the statement, we reset it instead of finalizing it. 
sqlite3_reset(insertMoleculeSQLStatement); 
+0

यदि कोड के ऊपर ब्लॉक में हम एक दूसरे SQL क्वेरी है, हम अभी भी अंतिम रूप देने कहते हैं (बयान) से पहले:

एक प्रश्न है कि केवल अंत में बयान रीसेट करता है का एक उदाहरण इस प्रकार है query2 पर sqlite3_prepare_v2() और फिर क्वेरी 2 के साथ कथन के माध्यम से कदम उठाने के बाद फिर से (कथन) को कॉल करें? या यदि मेरे पास कोई तरीका है जो प्रत्येक 5 सेकंड में सर्वर को चुनाव करता है और परिणामों को डेटाबेस में संग्रहीत करता है, तो क्या मैं प्रदर्शन विधि के लिए इस विधि के अंदर अंतिम विवरण देता हूं या इसे "पुन: उपयोग नहीं किया जाएगा"? – Zhang

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