इस खंड में, आप सीखेंगे कि C/C++ प्रोग्राम्स में SQLite का उपयोग कैसे करें।
इंस्टॉलेशन
इससे पहले कि आप हमारे C/C++ प्रोग्राम्स में SQLite का उपयोग करना शुरू करें, आपको यह सुनिश्चित करना होगा कि मशीन पर SQLite लाइब्रेरी सेट अप है। आप इंस्टॉलेशन प्रक्रिया को समझने के लिए SQLite Installation अध्याय देख सकते हैं।
C/C++ इंटरफ़ेस APIs
निम्नलिखित महत्वपूर्ण C/C++ SQLite इंटरफ़ेस रूटीन हैं, जो आपके C/C++ प्रोग्राम से SQLite डेटाबेस के साथ काम करने की आपकी आवश्यकता को पूरा कर सकते हैं। यदि आप अधिक परिष्कृत एप्लिकेशन की तलाश में हैं, तो आप SQLite आधिकारिक दस्तावेज़ में देख सकते हैं।
| क्रमांक | API और विवरण |
|---|---|
| 1 | sqlite3_open(const char *filename, sqlite3 **ppDb)यह रूटीन एक SQLite डेटाबेस फ़ाइल से कनेक्शन खोलता है और अन्य SQLite रूटीन द्वारा उपयोग किए जाने के लिए एक डेटाबेस कनेक्शन ऑब्जेक्ट लौटाता है। यदि filename आर्गुमेंट NULL या ':memory:' है, तो sqlite3_open() सत्र की अवधि के लिए केवल RAM में एक इन-मेमोरी डेटाबेस बनाएगा। यदि filename NULL नहीं है, तो sqlite3_open() अपने मान का उपयोग करके डेटाबेस फ़ाइल खोलने का प्रयास करेगा। यदि उस नाम से कोई फ़ाइल मौजूद नहीं है, तो sqlite3_open() उस नाम से एक नई डेटाबेस फ़ाइल खोलेगा। |
| 2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)यह रूटीन sql आर्गुमेंट द्वारा प्रदान की गई SQL कमांड्स को निष्पादित करने का एक त्वरित, आसान तरीका प्रदान करता है जिसमें एक से अधिक SQL कमांड हो सकते हैं। यहां, पहला आर्गुमेंट sqlite3 एक खुला डेटाबेस ऑब्जेक्ट है, sqlite_callback एक कॉलबैक है जिसके लिए data पहला आर्गुमेंट है और errmsg रूटीन द्वारा उठाई गई किसी भी त्रुटि को कैप्चर करने के लिए लौटाया जाएगा। SQLite3_exec() रूटीन sql आर्गुमेंट में दिए गए हर कमांड को पार्स और निष्पादित करता है जब तक कि यह स्ट्रिंग के अंत तक नहीं पहुंच जाता या कोई त्रुटि नहीं आती। |
| 3 | sqlite3_close(sqlite3*)यह रूटीन sqlite3_open() की कॉल द्वारा पहले खोले गए डेटाबेस कनेक्शन को बंद करता है। कनेक्शन से जुड़े सभी तैयार स्टेटमेंट्स को कनेक्शन बंद करने से पहले फाइनलाइज़ किया जाना चाहिए। यदि कोई क्वेरीज़ शेष हैं जो फाइनलाइज़ नहीं हुई हैं, तो sqlite3_close() SQLITE_BUSY त्रुटि संदेश के साथ लौटेगा: अनफाइनलाइज़्ड स्टेटमेंट्स के कारण बंद करने में असमर्थ। |
डेटाबेस से कनेक्ट करें
निम्नलिखित C कोड सेगमेंट दिखाता है कि किसी मौजूदा डेटाबेस से कैसे कनेक्ट करें। यदि डेटाबेस मौजूद नहीं है, तो यह बनाया जाएगा और अंत में एक डेटाबेस ऑब्जेक्ट लौटाया जाएगा।
उदाहरण कोड
#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, "डेटाबेस नहीं खोल सकते: %s\n", sqlite3_errmsg(db));
return 0;
} else {
fprintf(stderr, "डेटाबेस सफलतापूर्वक खोला गया\n");
}
sqlite3_close(db);
return 0;
}
आउटपुट
$gcc test.c -l sqlite3 $./a.out डेटाबेस सफलतापूर्वक खोला गया
टेबल बनाएं
निम्नलिखित 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;
/* डेटाबेस खोलें */
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "डेटाबेस नहीं खोल सकते: %s\n", sqlite3_errmsg(db));
return 0;
} else {
fprintf(stdout, "डेटाबेस सफलतापूर्वक खोला गया\n");
}
/* SQL स्टेटमेंट बनाएं */
sql = "CREATE TABLE COMPANY("
"ID INT PRIMARY KEY NOT NULL,"
"NAME TEXT NOT NULL,"
"AGE INT NOT NULL,"
"ADDRESS CHAR(50),"
"SALARY REAL );";
/* SQL स्टेटमेंट निष्पादित करें */
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL त्रुटि: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "टेबल सफलतापूर्वक बनाई गई\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
इंसर्ट ऑपरेशन
निम्नलिखित C कोड सेगमेंट दिखाता है कि आप ऊपर दिए गए उदाहरण में बनाई गई COMPANY टेबल में रिकॉर्ड कैसे बना सकते हैं:
उदाहरण कोड
#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;
/* डेटाबेस खोलें */
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "डेटाबेस नहीं खोल सकते: %s\n", sqlite3_errmsg(db));
return 0;
} else {
fprintf(stderr, "डेटाबेस सफलतापूर्वक खोला गया\n");
}
/* SQL स्टेटमेंट बनाएं */
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 );";
/* SQL स्टेटमेंट निष्पादित करें */
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL त्रुटि: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "रिकॉर्ड्स सफलतापूर्वक बनाए गए\n");
}
sqlite3_close(db);
return 0;
}
आउटपुट
डेटाबेस सफलतापूर्वक खोला गया रिकॉर्ड्स सफलतापूर्वक बनाए गए
SELECT ऑपरेशन
रिकॉर्ड्स लाने के वास्तविक उदाहरण के साथ आगे बढ़ने से पहले, आइए कॉलबैक फ़ंक्शन के बारे में कुछ विवरण देखें, जिसका उपयोग हम अपने उदाहरणों में कर रहे हैं। यह कॉलबैक SELECT स्टेटमेंट्स से परिणाम प्राप्त करने का एक तरीका प्रदान करता है। इसकी निम्नलिखित घोषणा है:
typedef int (*sqlite3_callback)( void*, /* sqlite3_exec() के 4th आर्गुमेंट में प्रदान किया गया डेटा */ int, /* पंक्ति में कॉलम की संख्या */ char**, /* पंक्ति में फ़ील्ड्स को दर्शाने वाले स्ट्रिंग्स का ऐरे */ char** /* कॉलम नामों को दर्शाने वाले स्ट्रिंग्स का ऐरे */ );
यदि उपरोक्त कॉलबैक को sqlite_exec() रूटीन में तीसरे आर्गुमेंट के रूप में प्रदान किया जाता है, तो SQLite SQL आर्गुमेंट के भीतर निष्पादित प्रत्येक SELECT स्टेटमेंट में संसाधित प्रत्येक रिकॉर्ड के लिए इस कॉलबैक फ़ंक्शन को कॉल करेगा।
निम्नलिखित C कोड सेगमेंट दिखाता है कि आप ऊपर दिए गए उदाहरण में बनाई गई COMPANY टेबल से रिकॉर्ड्स कैसे ला और प्रदर्शित कर सकते हैं:
उदाहरण कोड
#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 = "कॉलबैक फ़ंक्शन कॉल किया गया";
/* डेटाबेस खोलें */
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "डेटाबेस नहीं खोल सकते: %s\n", sqlite3_errmsg(db));
return 0;
} else {
fprintf(stderr, "डेटाबेस सफलतापूर्वक खोला गया\n");
}
/* SQL स्टेटमेंट बनाएं */
sql = "SELECT * from COMPANY";
/* SQL स्टेटमेंट निष्पादित करें */
rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL त्रुटि: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "ऑपरेशन सफलतापूर्वक किया गया\n");
}
sqlite3_close(db);
return 0;
}
आउटपुट
डेटाबेस सफलतापूर्वक खोला गया कॉलबैक फ़ंक्शन कॉल किया गया: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 कॉलबैक फ़ंक्शन कॉल किया गया: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 कॉलबैक फ़ंक्शन कॉल किया गया: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 कॉलबैक फ़ंक्शन कॉल किया गया: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 ऑपरेशन सफलतापूर्वक किया गया