इस खंड में, आप सीखेंगे कि C/C++ प्रोग्राम में SQLite का उपयोग कैसे करें।
इंस्टॉलेशन
हमारे C/C++ प्रोग्राम में SQLite का उपयोग शुरू करने से पहले, आपको यह सुनिश्चित करना होगा कि आपके पास मशीन पर SQLite लाइब्रेरी स्थापित है। इंस्टॉलेशन प्रक्रिया को समझने के लिए आप SQLite इंस्टालेशन चैप्टर की जांच कर सकते हैं।
C/C++ इंटरफ़ेस API
निम्नलिखित महत्वपूर्ण C/C++ SQLite इंटरफ़ेस रूटीन हैं, जो आपके C/C++ प्रोग्राम से SQLite डेटाबेस के साथ काम करने के लिए आपकी आवश्यकता को पूरा कर सकते हैं। यदि आप अधिक परिष्कृत एप्लिकेशन की तलाश में हैं, तो आप SQLite आधिकारिक दस्तावेज़ीकरण देख सकते हैं।
सीरियल नंबर | <वें शैली ="चौड़ाई:87.9591%; पाठ-संरेखण:केंद्र;">एपीआई और विवरण|
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb)यह रूटीन एक SQLite डेटाबेस फ़ाइल के लिए एक कनेक्शन खोलता है और अन्य SQLite रूटीन द्वारा उपयोग किए जाने के लिए एक डेटाबेस कनेक्शन ऑब्जेक्ट देता है। अगर फ़ाइल नाम तर्क है NULL या ':memory:', sqlite3_open() RAM में एक इन-मेमोरी डेटाबेस बनाएगा जो केवल सत्र की अवधि के लिए रहता है। यदि फ़ाइल नाम NULL नहीं है, तो sqlite3_open() डेटाबेस फ़ाइल को उसके मान का उपयोग करके खोलने का प्रयास करता है। यदि उस नाम की कोई फ़ाइल मौजूद नहीं है, तो sqlite3_open() उस नाम से एक नई डेटाबेस फ़ाइल खोलेगा। |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)यह रूटीन sql तर्क द्वारा प्रदान किए गए SQL कमांड को निष्पादित करने का एक त्वरित, आसान तरीका प्रदान करता है जिसमें एक से अधिक SQL कमांड शामिल हो सकते हैं। यहां, पहला तर्क sqlite3 एक खुला डेटाबेस ऑब्जेक्ट है, sqlite_callback एक कॉल बैक है जिसके लिए डेटा पहला तर्क है और दिनचर्या द्वारा उठाए गए किसी भी त्रुटि को पकड़ने के लिए errmsg वापस कर दिया जाएगा। SQLite3_exec() नियमित पार्स और SQL तर्क में दिए गए प्रत्येक आदेश को तब तक निष्पादित करता है जब तक कि यह स्ट्रिंग के अंत तक नहीं पहुंच जाता है या किसी त्रुटि का सामना नहीं करता है। |
3 | sqlite3_close(sqlite3*)यह रूटीन एक डेटाबेस कनेक्शन को बंद कर देता है जिसे पहले sqlite3_open() पर कॉल करके खोला गया था। कनेक्शन बंद करने से पहले कनेक्शन से जुड़े सभी तैयार बयानों को अंतिम रूप दिया जाना चाहिए। यदि कोई प्रश्न शेष रहता है जिसे अंतिम रूप नहीं दिया गया है, तो sqlite3_close () SQLITE_BUSY को त्रुटि संदेश के साथ वापस कर देगा, अधूरे बयानों के कारण बंद करने में असमर्थ। |
डेटाबेस से कनेक्ट करें
निम्नलिखित सी कोड खंड दिखाता है कि मौजूदा डेटाबेस से कैसे जुड़ना है। यदि डेटाबेस मौजूद नहीं है, तो इसे बनाया जाएगा और अंत में एक डेटाबेस ऑब्जेक्ट वापस कर दिया जाएगा।
उदाहरण कोड
#include <stdio.h> #include <sqlite3.h> int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } sqlite3_close(db); }
आउटपुट
$gcc test.c -l sqlite3 $./a.out Opened database successfully
टेबल बनाएं
पहले बनाए गए डेटाबेस में तालिका बनाने के लिए निम्नलिखित C कोड खंड का उपयोग किया जाएगा -
उदाहरण कोड
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stdout, "Opened database successfully\n"); } /* Create SQL statement */ sql = "CREATE TABLE COMPANY(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR(50)," \ "SALARY REAL );"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Table created successfully\n"); } sqlite3_close(db); return 0; }
आउटपुट (डेटाबेस फ़ाइल की स्थिति जांचें):
-rwxr-xr-x. 1 root root 9567 May 8 02:31 a.out -rw-r--r--. 1 root root 1207 May 8 02:31 test.c -rw-r--r--. 1 root root 3072 May 8 02:31 test.db
ऑपरेशन डालें
निम्नलिखित सी कोड खंड दिखाता है कि आप उपरोक्त उदाहरण में बनाई गई कंपनी तालिका में रिकॉर्ड कैसे बना सकते हैं –
उदाहरण कोड
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Records created successfully\n"); } sqlite3_close(db); return 0; }
आउटपुट
Opened database successfully Records created successfully
ऑपरेशन चुनें
रिकॉर्ड लाने के लिए वास्तविक उदाहरण के साथ आगे बढ़ने से पहले, आइए हम कॉलबैक फ़ंक्शन के बारे में कुछ विवरण देखें, जिसका उपयोग हम अपने उदाहरणों में कर रहे हैं। यह कॉलबैक सेलेक्ट स्टेटमेंट से परिणाम प्राप्त करने का एक तरीका प्रदान करता है। इसकी निम्नलिखित घोषणा है -
typedef int (*sqlite3_callback)( void*, /* Data provided in the 4th argument of sqlite3_exec() */ int, /* The number of columns in row */ char**, /* An array of strings representing fields in the row */ char** /* An array of strings representing column names */ );
यदि उपरोक्त कॉलबैक sqlite_exec() रूटीन में तीसरे तर्क के रूप में प्रदान किया गया है, तो SQLite इस कॉलबैक फ़ंक्शन को SQL तर्क के भीतर निष्पादित प्रत्येक चयन कथन में संसाधित प्रत्येक रिकॉर्ड के लिए कॉल करेगा।
निम्नलिखित सी कोड खंड दिखाता है कि आप उपरोक्त उदाहरण में बनाई गई कंपनी तालिका से रिकॉर्ड कैसे प्राप्त कर सकते हैं और प्रदर्शित कर सकते हैं -
उदाहरण कोड
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName) { int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "SELECT * from COMPANY"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; }
आउटपुट
Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 Callback function called: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 Callback function called: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Callback function called: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully