sqlite
sqlite3_stmt: तैयार कथन (C API)
खोज…
टिप्पणियों
आधिकारिक दस्तावेज: तैयार स्टेटमेंट ऑब्जेक्ट
एक बयान निष्पादित करना
एक कथन sqlite3_prepare_v2 () जैसे फ़ंक्शन के साथ बनाया गया है।
एक तैयार स्टेटमेंट ऑब्जेक्ट को sqlite3_finalize () के साथ साफ किया जाना चाहिए। त्रुटि के मामले में इसे मत भूलना।
यदि मापदंडों का उपयोग किया जाता है, तो sqlite3_bind_xxx () फ़ंक्शन के साथ उनके मान सेट करें।
वास्तविक निष्पादन तब होता है जब sqlite3_step () कहा जाता है।
const char *sql = "INSERT INTO MyTable(ID, Name) VALUES (?, ?)";
sqlite3_stmt *stmt;
int err;
err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
printf("prepare failed: %s\n", sqlite3_errmsg(db));
return /* failure */;
}
sqlite3_bind_int (stmt, 1, 42); /* ID */
sqlite3_bind_text(stmt, 2, "Bob", -1, SQLITE_TRANSIENT); /* name */
err = sqlite3_step(stmt);
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_finalize(stmt);
return /* success */;
एक कर्सर से डेटा पढ़ना
किसी अन्य कथन की तरह एक चयन क्वेरी निष्पादित की जाती है। लौटे डेटा को पढ़ने के लिए sqlite3_step () को लूप में बुलाएं। यह रिटर्न:
- SQLITE_ROW: यदि अगली पंक्ति के लिए डेटा उपलब्ध है, या
- SQLITE_DONE: यदि कोई और पंक्तियाँ नहीं हैं, या
- कोई त्रुटि कोड।
यदि कोई क्वेरी किसी भी पंक्तियों को वापस नहीं करती है, तो पहला चरण SQLITE_DONE देता है।
वर्तमान पंक्ति से डेटा पढ़ने के लिए, sqlite3_column_xxx () फ़ंक्शन को कॉल करें:
const char *sql = "SELECT ID, Name FROM MyTable";
sqlite3_stmt *stmt;
int err;
err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
printf("prepare failed: %s\n", sqlite3_errmsg(db));
return /* failure */;
}
for (;;) {
err = sqlite3_step(stmt);
if (err != SQLITE_ROW)
break;
int id = sqlite3_column_int (stmt, 0);
const char *name = sqlite3_column_text(stmt, 1);
if (name == NULL)
name = "(NULL)";
printf("ID: %d, Name: %s\n", id, name);
}
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_finalize(stmt);
return /* success */;
एक तैयार कथन को कई बार निष्पादित करना
एक बयान निष्पादित होने के बाद, sqlite3_reset () के लिए एक कॉल इसे मूल स्थिति में वापस लाता है ताकि इसे फिर से निष्पादित किया जा सके।
आमतौर पर, जबकि कथन स्वयं एक ही रहता है, पैरामीटर बदले जाते हैं:
const char *sql = "INSERT INTO MyTable(ID, Name) VALUES (?, ?)";
sqlite3_stmt *stmt;
int err;
err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
printf("prepare failed: %s\n", sqlite3_errmsg(db));
return /* failure */;
}
for (...) {
sqlite3_bind_int (stmt, 1, ...); /* ID */
sqlite3_bind_text(stmt, 2, ...); /* name */
err = sqlite3_step(stmt);
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_reset(stmt);
}
sqlite3_finalize(stmt);
return /* success */;