Rumah  >  Artikel  >  pembangunan bahagian belakang  >  SQL menggunakan C/C++ dan SQLite

SQL menggunakan C/C++ dan SQLite

WBOY
WBOYke hadapan
2023-09-19 19:49:02680semak imbas

SQL menggunakan C/C++ dan SQLite

Dalam bahagian ini, anda akan belajar cara menggunakan SQLite dalam program C/C++.

Pemasangan

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.

API Antara Muka C/C++

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.

Menyambung ke pangkalan data

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.

Contoh kod

#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&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   sqlite3_close(db);
}

Output

$gcc test.c -l sqlite3
$./a.out
Opened database successfully

Buat jadual

Coretan kod C berikut akan digunakan untuk mencipta jadual dalam pangkalan data yang dibuat sebelum ini -

Kod sampel

#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&#39;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;
}

failOutputreee (semak status fail pangkalan data):

Operasi Sisipkan

Coretan kod C berikut menunjukkan cara mencipta rekod dalam jadual SYARIKAT yang dibuat dalam contoh di atas –

Kod contoh

-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

Output

#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&#39;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, &#39;Paul&#39;, 32, &#39;California&#39;, 20000.00 ); " \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
      "VALUES (2, &#39;Allen&#39;, 25, &#39;Texas&#39;, 15000.00 ); " \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
      "VALUES (3, &#39;Teddy&#39;, 23, &#39;Norway&#39;, 20000.00 );" \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
      "VALUES (4, &#39;Mark&#39;, 25, &#39;Rich-Mond &#39;, 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;
}

PILIH Operasi

untuk mendapatkan contoh praktikal sebelum berpindah

rekod, mari kita lihat Beberapa butiran tentang fungsi panggil balik yang digunakan dalam contoh. Panggilan balik ini menyediakan cara untuk mendapatkan hasil daripada pernyataan SELECT. Ia mempunyai pernyataan berikut – ​​

Opened database successfully
Records created successfully

Jika 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 */
);

Output

#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&#39;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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam