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

सी/सी++ का उपयोग कर डेटाबेस कनेक्टिविटी

इस खंड में, आप सीखेंगे कि 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

  1. सी/सी++ ट्रिकी प्रोग्राम्स

    यहां 10 ट्रिकी प्रोग्राम हैं जो आपके प्रोग्रामिंग बेसिक्स का परीक्षण करेंगे। 1. C++ में प्रिंट करने का प्रोग्राम सी ++ प्रोग्रामिंग भाषा में, हम पाठ के प्रारंभ और अंत को मुद्रित करने के लिए उद्धरणों का उपयोग करते हैं। इसलिए, प्रिंटिंग कोट्स को एक विशेष एस्केप सीक्वेंस की आवश्यकता होती है। इसलिए,

  1. सी/सी++ का उपयोग कर ऐरे मैनिपुलेशन और योग

    यहां हम एक समस्या देखेंगे, मान लीजिए कि एक सरणी दी गई है। एन तत्व हैं। एक अन्य मान S भी दिया गया है। हमें सरणी में एक तत्व K को खोजना है, जैसे कि, यदि सभी तत्व जो K से बड़े हैं, K के बराबर बना दिया जाता है, तो अंतिम सरणी के सभी तत्वों का योग S के बराबर हो जाता है। यदि यह संभव नहीं है, फिर वापसी -1.

  1. सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

    दिए गए सरणी को क्रमबद्ध करने के लिए होने वाले व्युत्क्रमों की संख्या को व्युत्क्रम गणना के रूप में जाना जाता है। उलटा समस्या एक शास्त्रीय समस्या है जिसे मर्ज सॉर्ट एल्गोरिदम का उपयोग करके हल किया जा सकता है। इस समस्या में हम इसके बाईं ओर सभी तत्वों को अधिक से अधिक गिनेंगे और गिनती को आउटपुट में जोड़