SQLite - C/C++
Pemasangan
Sebelum menggunakan SQLite dalam program C/C++, kita perlu memastikan bahawa sudah ada perpustakaan SQLite pada mesin. Anda boleh melihat bab pemasangan SQLite untuk proses pemasangan.
API Antara Muka C/C++
Berikut ialah program antara muka C&C++ / SQLite yang penting yang boleh memenuhi keperluan anda untuk menggunakan pangkalan data SQLite dalam program C/C++. Jika anda memerlukan butiran lanjut, lihat dokumentasi rasmi SQLite.
Nombor siri | API & Penerangan | tr >||||||||
---|---|---|---|---|---|---|---|---|---|
1 | sqlite3_open(const char *nama fail, sqlite3 **ppDb)
| ||||||||
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)< /strong> <🎜>Rutin ini menyediakan jalan pintas untuk melaksanakan perintah SQL yang disediakan oleh parameter sql dan boleh terdiri daripada berbilang arahan SQL. <🎜><🎜>Di sini, parameter pertama sqlite3 ialah objek pangkalan data yang dibuka, sqlite_callback ialah panggilan balik dan data ialah parameter ketiganya . Satu hujah, errmsg akan dikembalikan untuk menangkap sebarang ralat yang dihasilkan oleh program. Program <🎜><🎜>sqlite3_exec() menghuraikan dan melaksanakan setiap arahan yang diberikan oleh parameter sql sehingga penghujung rentetan atau ralat ditemui. <🎜> | ||||||||
3 | sqlite3_close(sqlite3*) <🎜>Rutin ini dipanggil sebelum ditutup Sambungan pangkalan data dibuka oleh sqlite3_open(). Semua pernyataan berkaitan sambungan hendaklah dilengkapkan sebelum sambungan ditutup. <🎜><🎜>Jika masih terdapat pertanyaan yang belum diselesaikan, sqlite3_close() akan mengembalikan mesej ralat SQLITE_BUSY yang melarang penutupan. <🎜> |
Menyambung ke pangkalan data
Coretan kod C berikut menunjukkan cara menyambung ke pangkalan data sedia ada. Jika pangkalan data tidak wujud, ia akan dibuat dan objek pangkalan data akan dikembalikan.
#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)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } sqlite3_close(db); }
Sekarang, mari kita susun dan jalankan atur cara di atas untuk mencipta pangkalan data kami test.db dalam direktori semasa. Anda boleh menukar laluan mengikut keperluan.
$gcc test.c -l sqlite3 $./a.out Opened database successfully
Jika anda ingin menggunakan kod sumber C++, anda boleh menyusun kod seperti berikut:
$g++ test.c -l sqlite3
Di sini, pautkan program kami dengan perpustakaan sqlite3 untuk menyediakan fungsi yang diperlukan kepada program C. Ini akan mencipta fail pangkalan data test.db dalam direktori anda dan anda akan mendapat hasil berikut:
-rwxr-xr-x. 1 root root 7383 May 8 02:06 a.out -rw-r--r--. 1 root root 323 May 8 02:05 test.c -rw-r--r--. 1 root root 0 May 8 02:06 test.db
Cipta jadual
Coretan kod C berikut akan digunakan dalam pangkalan data yang dibuat sebelum ini. jadual:
#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)); exit(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; }
Apabila atur cara di atas disusun dan dilaksanakan, ia akan mencipta jadual SYARIKAT dalam fail test.db, dan senarai fail akhir kelihatan seperti ini:
-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
operasi INSERT
Coretan kod C berikut menunjukkan cara membuat rekod dalam jadual SYARIKAT yang dibuat di atas:
#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)); exit(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; }
Apabila atur cara di atas disusun dan dilaksanakan, ia akan mencipta rekod yang diberikan dalam jadual SYARIKAT dan akan memaparkan dua Baris berikut:
Opened database successfully Records created successfully
PILIH operasi
Sebelum kita mula menerangkan contoh mendapatkan rekod, mari kita fahami beberapa butiran fungsi panggil balik, yang akan digunakan dalam contoh kita . Panggilan balik ini menyediakan cara untuk mendapatkan hasil daripada pernyataan SELECT. Ia diisytiharkan seperti berikut:
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 */ );
Jika panggilan balik di atas digunakan sebagai parameter ketiga dalam prosedur sqlite_exec(), maka 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 untuk mendapatkan dan memaparkan rekod daripada jadual SYARIKAT yang dibuat sebelum ini:
#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)); exit(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; }
Apabila atur cara di atas menyusun dan melaksanakan, ia menghasilkan keputusan berikut:
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
Kemas kini Operasi
Coretan kod C berikut menunjukkan cara menggunakan pernyataan KEMASKINI untuk mengemas kini sebarang rekod dan kemudian mendapatkan dan memaparkan rekod yang dikemas kini daripada jadual SYARIKAT:
#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)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } /* Create merged SQL statement */ sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " \ "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; }
Atur cara di atas compiles dan Apabila dilaksanakan, ia menghasilkan keputusan berikut:
Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.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
Operasi PADAM
Coretan kod C berikut menunjukkan cara untuk memadam sebarang rekod menggunakan pernyataan DELETE dan kemudian dapatkan dan paparkan rekod yang tinggal daripada jadual SYARIKAT :
#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)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } /* Create merged SQL statement */ sql = "DELETE from COMPANY where ID=2; " \ "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; }
Apabila atur cara di atas disusun dan dilaksanakan, ia menghasilkan hasil berikut:
Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.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