2010-08-17 12 views
7

मैं डेटाबेस फ़ाइल खोल रहा हूं और संभावित रूप से इसे बना रहा हूं यदि यह अस्तित्व में नहीं है।मैं कैसे जांचूं कि sqlite3 C++ API में कोई तालिका मौजूद है या नहीं?

लेकिन किसी कारण से, यह तालिका नहीं बनाता है। कोई विचार?

const char* sql = "CREATE TABLE IF NOT EXISTS blocks(id text primary_key,length numeric)"; 

sqlite3_stmt *stmt; 
rc = sqlite3_prepare_v2(db_, create_table_sql, -1, &stmt, NULL); 
rc = sqlite3_step(stmt); 

मुझे इसे यहां तक ​​नहीं मिला है, मैं प्रत्येक बिंदु पर रिटर्न कोड की जांच कर रहा हूं। कोई त्रुटि नहीं है।

शायद इसे पूरा करने का एक बेहतर तरीका है?

+1

वाह, आप उस स्थानीयकरण पर विचार करते हैं? 5k से ऊपर प्रतिष्ठा वाले लोगों के साथ 5 जवाब दिए गए हैं जो आश्चर्यजनक हैं। वैसे भी .... – Matt

उत्तर

9

रूपांतर:

select count(type) from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK'; 

वापसी करेंगे 0 तालिका मौजूद नहीं है, 1 अगर यह करता है।

2

ऐसा लगता है कि आप SQL में दाएं कोष्ठक खो रहे हैं। यह होना चाहिए:

const char* sql = "CREATE TABLE IF NOT EXISTS blocks(id text primary_key,length numeric);"; 
+0

क्षमा करें, उपर्युक्त उदाहरण वास्तविक है कि मैं किसके लिए काम करता हूं उसे छिपाने के लिए थोड़ा अलग है। वास्तविक कोड में निर्माण तालिका अभी भी कार्य नहीं करती है। – Matt

0

मेरे अपने प्रश्न का उत्तर दें।

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

हालांकि, मैं इस बात के बारे में उत्सुक हूं कि कोई ऐसा कार्य है जो मुझे परीक्षण करने की अनुमति देगा यदि कोई तालिका मौजूद है या नहीं।

5

निम्नलिखित एसक्यूएल निष्पादित करें:

select 1 from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK' 

यदि आप एक पंक्ति तो तालिका से मौजूद है। यदि परिणाम सेट खाली है तो यह नहीं है। एक और दिए गए जवाब पर

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

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