2009-08-04 22 views
16

मैं sqlite3 में टेक्स्ट कॉलम बनाना/अपडेट करना चाहता हूं। जब मैं निर्माण/अद्यतन के बाद पंक्तियों को पुनर्प्राप्त करता हूं, तो टेक्स्ट '?' होता है। हालांकि पूर्णांक मान ठीक से बने रहे हैं।SQLITE_TRANSIENT बनाम SQLITE_STATIC का उपयोग कब करें?

मेरे पाठ बयान इस तरह दिखेगा:

const char *sql = "INSERT INTO todo(title, description, priority, status, created, expires, posx, posy, updated)" 
        " VALUES('?', '?', '?', '?', '?', '?', '?', '?', '?');"; 
if (sqlite3_prepare_v2(database, sql, -1, &insert_statment, NULL) != SQLITE_OK) 
    ... 
sqlite3_bind_text(update_statment, 5, [[dt stringFromDate:self.updated] UTF8String], -1, SQLITE_TRANSIENT); 

मैं SQLITE_STATIC रूप SQLITE_TRANSIENT की कोशिश की है और साथ ही। दोनों मामलों में एक ही परिणाम ('?') उत्पन्न होता प्रतीत होता है। मैंने यह भी सत्यापित किया है कि टेक्स्ट मान मान्य हैं जब वे उचित एसक्यूएल स्टेटमेंट में पास हो जाते हैं।

कोई विचार?

+0

आपका तैयार कथन कैसा दिखता है? –

उत्तर

39

'चारों ओर के पात्रों को हटाएं? अपने एसक्यूएल स्ट्रिंग में।

SQLITE_TRANSIENT आपकी स्ट्रिंग की प्रतिलिपि बनाने के लिए SQLite को बताता है। जब क्वेरी को निष्पादित करने से पहले आपकी स्ट्रिंग (बफर) दूर जा रही है तो इसका उपयोग करें।

SQLITE_STATIC SQLite को बताता है कि आप वादा करते हैं कि जब आप स्ट्रिंग पर पास करते हैं तो पॉइंटर क्वेरी निष्पादित होने तक वैध होगा। इसका उपयोग करें जब आपका बफर होता है, उम, स्थिर, या कम से कम गतिशील दायरा है जो बाध्यकारी से अधिक है।

+0

मैं इसे आज़मा दूंगा। –

+1

ठीक है। यह बहुत अधिक समझ में आता है। ओह। बहुत धन्यवाद! –

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