Rumah > Artikel > pembangunan bahagian belakang > SQL menggunakan C/C++ dan SQLite
Dalam bahagian ini, anda akan belajar cara menggunakan SQLite dalam program C/C++.
Sebelum anda mula menggunakan SQLite dalam program C/C++ anda, anda perlu memastikan bahawa perpustakaan SQLite disediakan pada komputer anda. Anda boleh melihat bab pemasangan SQLite untuk memahami proses pemasangan.
Berikut ialah rutin antara muka SQLite C/C++ penting yang boleh memenuhi keperluan anda untuk menggunakan pangkalan data SQLite daripada program C/C++ anda. Jika anda sedang mencari aplikasi yang lebih kompleks, maka anda boleh menyemak dokumentasi rasmi SQLite.
Nombor Siri | API dan Perihalan |
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb)Rutin ini membuka sambungan ke fail pangkalan data SQLite dan mengembalikan objek sambungan pangkalan data untuk digunakan oleh SQLite yang lain. Jika parameter filename ialah NULL atau ':memory:', sqlite3_open() akan mencipta pangkalan data dalam memori dalam RAM yang bertahan hanya untuk tempoh sesi. Jika nama fail bukan NULL, sqlite3_open() cuba membuka fail pangkalan data menggunakan nilainya. Jika fail dengan nama itu tidak wujud, sqlite3_open() akan membuka fail pangkalan data baharu dengan nama itu. |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)Rutin ini menyediakan cara yang cepat dan mudah untuk melaksanakan perintah SQL yang disediakan oleh parameter sql, yang boleh mengandungi berbilang arahan SQL. Di sini, parameter pertama sqlite3 ialah objek pangkalan data terbuka, sqlite_callback ialah panggilan balik di mana data ialah parameter pertama, dan errmsg akan dikembalikan untuk menangkap sebarang ralat yang dibangkitkan oleh rutin. Rutin SQLite3_exec () menghuraikan dan melaksanakan setiap arahan yang diberikan dalam hujah sql sehingga penghujung rentetan dicapai atau ralat ditemui. |
3 | sqlite3_close(sqlite3*)Rutin ini menutup sambungan pangkalan data yang sebelum ini dibuka dengan memanggil sqlite3_open(). Semua pernyataan yang disediakan berkaitan dengan sambungan hendaklah dilengkapkan sebelum menutup sambungan. Jika masih terdapat sebarang pertanyaan yang tidak diselesaikan, sqlite3_close() akan mengembalikan SQLITE_BUSY dan memaparkan mesej ralat Tidak dapat ditutup kerana kenyataan yang belum selesai. |
Coretan kod C berikut menunjukkan cara menyambung ke pangkalan data sedia ada. Jika pangkalan data tidak wujud, cipta pangkalan data dan akhirnya kembalikan objek pangkalan data.
#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
Coretan kod C berikut akan digunakan untuk mencipta jadual dalam pangkalan data yang dibuat sebelum ini -
#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 successfullyJika panggilan balik di atas disediakan sebagai parameter ketiga dalam rutin sqlite_exec(), SQLite akan memanggil fungsi panggil balik ini untuk setiap rekod yang diproses dalam setiap pernyataan SELECT yang dilaksanakan dalam parameter SQL. Coretan kod C berikut menunjukkan cara mendapatkan dan memaparkan rekod daripada jadual SYARIKAT yang dibuat dalam contoh di atas – Kod Contoh
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 */ );
#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; }
Atas ialah kandungan terperinci SQL menggunakan C/C++ dan SQLite. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!