int main(int argc,char **argv){ 
 int rc
 sqlite3 *db;

 rc = sqlite3_open(argv[1], &db);

 printf("rc = %d\n", rc);
 if(rc){
    printf("Not Valid Database\n");
    sqlite3_close(db);
    exit(1);
}

अगर मैं इसे ./test exsisting_database.sqlite3 के साथ चलाता हूं तो यह अपेक्षित के रूप में 0 देता है। लेकिन ./test not_exsisting_database.sqlite3 के साथ यह अभी भी 0 लौटाता है और not_exsisting_database.sqlite3 फ़ाइल बनाता है

3
Lars Karlsen 6 सितंबर 2017, 13:33
यदि नहीं मिला तो डेटाबेस बनाना sqlite3_open के लिए डिज़ाइन इरादा है। sqlite3_open_v2 पर एक नज़र डालें जो फ़्लैग स्वीकार करता है और यदि डेटाबेस फ़ाइल मौजूद नहीं है तो एक त्रुटि कोड लौटाएगा।
 – 
Brian Tiffin
6 सितंबर 2017, 13:50

1 उत्तर

सबसे बढ़िया उत्तर

यहां पाए गए डेटाबेस को खोलने पर SQLite दस्तावेज़ से: https://sqlite.org/c3ref/open.html

इसके अलावा sqlite3_open_v2() इंटरफ़ेस sqlite3_open() की तरह काम करता है यह अतिरिक्त नियंत्रण के लिए दो अतिरिक्त मापदंडों को स्वीकार करता है नया डेटाबेस कनेक्शन। sqlite3_open_v2 () के लिए झंडे पैरामीटर कर सकते हैं निम्नलिखित तीन मानों में से एक लें, वैकल्पिक रूप से के साथ संयुक्त SQLITE_OPEN_NOMUTEX, SQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE, SQLITE_OPEN_PRIVATECACHE, और/या SQLITE_OPEN_URI फ़्लैग:

SQLITE_OPEN_READONLY डेटाबेस केवल-पढ़ने के लिए मोड में खोला गया है। यदि डेटाबेस पहले से मौजूद नहीं है, तो एक त्रुटि वापस आ जाती है।

SQLITE_OPEN_READWRITE यदि संभव हो तो डेटाबेस पढ़ने और लिखने के लिए खोला जाता है, या केवल तभी पढ़ने के लिए खोला जाता है जब फ़ाइल ऑपरेटिंग सिस्टम द्वारा संरक्षित लिखी जाती है। किसी भी मामले में डेटाबेस पहले से मौजूद होना चाहिए, अन्यथा एक त्रुटि लौटा दी जाती है।

SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE डेटाबेस के लिए खोला गया है पढ़ना और लिखना, और अगर यह पहले से मौजूद नहीं है तो बनाया गया है। यह वह व्यवहार है जो हमेशा sqlite3_open() और sqlite3_open16() के लिए उपयोग किया जाता है।

तो आपको sqlite3_open() के बजाय SQLITE_OPEN_CREATE ध्वज के बिना sqlite3_open_v2() का उपयोग करने की आवश्यकता है ()

2
Community 20 जून 2020, 12:12