Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

SQL C/C++ और SQLite का उपयोग कर रहा है

इस खंड में, आप सीखेंगे कि C/C++ प्रोग्राम में SQLite का उपयोग कैसे करें।

इंस्टॉलेशन

हमारे C/C++ प्रोग्राम में SQLite का उपयोग शुरू करने से पहले, आपको यह सुनिश्चित करना होगा कि आपके पास मशीन पर SQLite लाइब्रेरी स्थापित है। इंस्टालेशन प्रक्रिया को समझने के लिए आप SQLite इंस्टालेशन चैप्टर देख सकते हैं।

C/C++ इंटरफ़ेस API

निम्नलिखित महत्वपूर्ण C/C++ SQLite इंटरफ़ेस रूटीन हैं, जो आपके C/C++ प्रोग्राम से SQLite डेटाबेस के साथ काम करने के लिए आपकी आवश्यकता को पूरा कर सकते हैं। यदि आप अधिक परिष्कृत एप्लिकेशन की तलाश में हैं, तो आप SQLite आधिकारिक दस्तावेज़ीकरण देख सकते हैं।

<वें शैली ="चौड़ाई:88.5034%; पाठ-संरेखण:केंद्र;">एपीआई और विवरण
सीरियल नंबर
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

  1. सी/सी++ में strdup() और strdndup()

    strdup() स्ट्रिंग को डुप्लिकेट करने के लिए फ़ंक्शन strdup () का उपयोग किया जाता है। यह नल-टर्मिनेटेड बाइट स्ट्रिंग के लिए एक पॉइंटर लौटाता है। यहाँ C भाषा में strdup() का सिंटैक्स दिया गया है, char *strdup(const char *string); सी भाषा में strdup() का एक उदाहरण यहां दिया गया है, उदाहरण #include &l

  1. C++ . का उपयोग करके 0, 1 और 2 के सरणियों को क्रमबद्ध करें

    0, 1, और 2 की एक सरणी को देखते हुए, तत्वों को इस क्रम में क्रमबद्ध करें कि सभी शून्य पहले 1 से पहले और सभी 2 अंत में आएं। हमें सरणी के सभी तत्वों को जगह में क्रमबद्ध करना होगा। हम डीएनएफ (डच राष्ट्रीय ध्वज) सॉर्टिंग एल्गोरिदम का उपयोग करके इस समस्या को हल कर सकते हैं। उदाहरण के लिए, इनपुट-1 - arr[

  1. पायथन और SQLite का उपयोग कर SQL

    इस लेख में, हम सीखेंगे कि पायथन और SQLite डेटाबेस के साथ SQL का उपयोग कैसे करें। पायथन में SQLite डेटाबेस से जुड़ने के लिए एक अंतर्निहित मॉड्यूल है। हम Python और SQLite को जोड़ने के लिए sqlite3 मॉड्यूल का उपयोग करने जा रहे हैं। SQLite डेटाबेस को Python से जोड़ने के लिए हमें नीचे दिए गए चरणों का पाल