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

SQL menggunakan C/C++ dan SQLite

WBOY
Lepaskan: 2023-09-19 19:49:02
ke hadapan
790 orang telah melayarinya

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)
Salin selepas log masuk
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)
Salin selepas log masuk
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< /em> 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*)
Salin selepas log masuk
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);
}
Salin selepas log masuk

Output

$gcc test.c -l sqlite3
$./a.out
Opened database successfully
Salin selepas log masuk

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;
}
Salin selepas log masuk

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
Salin selepas log masuk

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;
}
Salin selepas log masuk

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
Salin selepas log masuk

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 */
);
Salin selepas log masuk

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;
}
Salin selepas log masuk

Atas ialah kandungan terperinci SQL menggunakan C/C++ dan SQLite. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan