Latest web development tutorials

SQLite - C / C ++

memasang

Dalam C / C ++ Program sebelum menggunakan SQLite, kita perlu memastikan bahwa ada perpustakaan SQLite pada mesin. Anda dapat melihat bagian instalasi SQLite untuk proses instalasi.

C / C ++ antarmuka API

Berikut ini adalah C & C antarmuka program ++ / SQLite penting untuk memenuhi kebutuhan Anda menggunakan basis data SQLite di C / C ++ program. Jika Anda memerlukan informasi lebih lanjut, silakan lihat dokumentasi SQLite resmi.

序号API & 描述
1sqlite3_open(const char *filename, sqlite3 **ppDb)

该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。

如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。

如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。

2sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。

在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。

sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。

3sqlite3_close(sqlite3*)

该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。

如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。

Terhubung ke database

Berikut cuplikan kode C menunjukkan bagaimana menghubungkan ke database yang sudah ada. Jika database tidak ada, itu dibuat, dan akhirnya mengembalikan objek database.

#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, "Tidak bisa membuka database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Lain {
      fprintf (stderr, "Database Dibuka berhasil \ n");
   }
   sqlite3_close (db);
}

Sekarang, mari kita mengkompilasi dan menjalankan program di atas, membuattest.db database kami di direktori saat ini.Anda dapat mengubah jalur yang diperlukan.

$ Gcc test.c l sqlite3
$. / A.out
database yang dibuka berhasil

Jika Anda ingin menggunakan C ++ kode sumber dapat disusun sesuai dengan kode berikut menunjukkan:

$ G ++ test.c l sqlite3

Di sini, program perpustakaan link kami sqlite3 untuk program C untuk menyediakan fungsi yang diperlukan. Ini akan membuat test.db file database dalam direktori Anda, Anda akan mendapatkan hasil sebagai berikut:

-rwxr-xr-x. 1 root root 7383 8 Mei 02:06 a.out
-rw-r - r-- 1 root root 323 8 Mei 02:05 test.c.
-rw-r - r-- 1 root root 0 8 Mei 02:06 test.db.

Buat tabel

Berikut potongan kode C akan digunakan untuk membuat tabel dalam database yang dibuat sebelumnya:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

static int callback (void * NotUsed, int argc, char ** argv, char ** azColName) {
   int i;
   untuk (i = 0; i & lt; 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;

   / * Buka basis data * /
   rc = sqlite3_open ( "test.db", & db);
   if (rc) {
      fprintf (stderr, "Tidak bisa membuka database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Lain {
      fprintf (stdout, "Database Dibuka berhasil \ n");
   }

   / * Buat pernyataan SQL * /
   sql = "CREATE TABLE PERUSAHAAN (" \
         "ID INT PRIMARY KEY NOT NULL," \
         "NAME TEXT NOT NULL," \
         "AGE INT NOT NULL," \
         "ALAMAT CHAR (50)," \
         "GAJI NYATA);";

   / * Jalankan pernyataan SQL * /
   rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg);
   if (rc! = SQLITE_OK) {
   fprintf (stderr, "SQL error:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Lain {
      fprintf (stdout, "Tabel berhasil dibuat \ n");
   }
   sqlite3_close (db);
   return 0;
}

Ketika program di atas dikompilasi dan dijalankan, itu menciptakan meja PERUSAHAAN dalam file test.db, daftar akhir dari file sebagai berikut:

-rwxr-xr-x. 1 root root 9567 8 Mei 02:31 a.out
-rw-r - r-- 1 root root 1207 8 Mei 02:31 test.c.
-rw-r - r-- 1 root root 3072 8 Mei 02:31 test.db.

operasi INSERT

Berikut cuplikan kode C menunjukkan cara membuat catatan dalam tabel COMPANY 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;
   untuk (i = 0; i & lt; 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;

   / * Buka basis data * /
   rc = sqlite3_open ( "test.db", & db);
   if (rc) {
      fprintf (stderr, "Tidak bisa membuka database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Lain {
      fprintf (stderr, "Database Dibuka berhasil \ n");
   }

   / * Buat pernyataan SQL * /
   sql = "INSERT INTO PERUSAHAAN (ID, NAMA, UMUR, ALAMAT, GAJI)" \
         "NILAI (1, 'Paul', 32, 'California', 20.000,00);" \
         "INSERT INTO PERUSAHAAN (ID, NAMA, UMUR, ALAMAT, GAJI)" \
         "NILAI (2, 'Allen', 25, 'Texas', 15.000,00);" \
         "INSERT INTO PERUSAHAAN (ID, NAMA, UMUR, ALAMAT, GAJI)" \
         "NILAI (3, 'Teddy', 23, 'Norwegia, 20.000,00);" \
         "INSERT INTO PERUSAHAAN (ID, NAMA, UMUR, ALAMAT, GAJI)" \
         "NILAI (4, 'Mark', 25, 'Rich-Mond', 65.000,00);";

   / * Jalankan pernyataan SQL * /
   rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "SQL error:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Lain {
      fprintf (stdout, "Rekaman berhasil dibuat \ n");
   }
   sqlite3_close (db);
   return 0;
}

Ketika program di atas dikompilasi dan dijalankan, itu akan menciptakan di dalam tabel COMPANY untuk catatan yang diberikan, dan menampilkan dua baris berikut:

database yang dibuka berhasil
Catatan berhasil dibuat

operasi SELECT

Sebelum kita mulai menjelaskan contoh didokumentasikan, mari kita memahami beberapa rincian dari fungsi callback, yang akan menjadi contoh kita gunakan. callback ini memberikan hasil yang diperoleh dari metode pernyataan SELECT. Hal ini dinyatakan sebagai berikut:

typedef int (* sqlite3_callback) (
void *, / * Data yang diberikan dalam argumen 4 dari sqlite3_exec () * /
int, / * Jumlah kolom dalam baris * /
Char **, / * Sebuah array dari string yang mewakili bidang dalam baris * /
Char ** / * Sebuah array dari string yang mewakili nama kolom * /
);

Jika callback atas sebagai parameter ketiga dalam prosedur sqlite_exec (), kemudian SQLite SQL untuk setiap record dalam parameter setiap proses eksekusi pernyataan SELECT memanggil fungsi callback.

Berikut cuplikan kode C menunjukkan bagaimana untuk mendapatkan dari meja PERUSAHAAN buat sebelumnya dan menampilkan catatan:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

static int callback (data * batal, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) data);
   untuk (i = 0; i & lt; 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 fungsi yang disebut";

   / * Buka basis data * /
   rc = sqlite3_open ( "test.db", & db);
   if (rc) {
      fprintf (stderr, "Tidak bisa membuka database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Lain {
      fprintf (stderr, "Database Dibuka berhasil \ n");
   }

   / * Buat pernyataan SQL * /
   sql = "SELECT * dari PERUSAHAAN";

   / * Jalankan pernyataan SQL * /
   rc = sqlite3_exec (db, sql, callback, (void *) data, & zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "SQL error:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Lain {
      fprintf (stdout, "Operasi berhasil dilakukan \ n");
   }
   sqlite3_close (db);
   return 0;
}

Ketika program di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

database yang dibuka berhasil
fungsi callback disebut: ID = 1
NAME = Paul
AGE = 32
ALAMAT = California
GAJI = 20000,0

fungsi callback disebut: ID = 2
NAME = Allen
AGE = 25
ALAMAT = Texas
GAJI = 15000,0

fungsi callback disebut: ID = 3
NAME = Teddy
AGE = 23
ALAMAT = Norwegia
GAJI = 20000,0

fungsi callback disebut: ID = 4
NAME = Mark
AGE = 25
ALAMAT = Rich-Mond
GAJI = 65000,0

Operasi berhasil dilakukan

operasi UPDATE

Berikut cuplikan kode C menunjukkan bagaimana menggunakan pernyataan UPDATE untuk memperbarui catatan apapun, kemudian mendapatkan dari meja PERUSAHAAN dan menampilkan catatan diperbarui:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

static int callback (data * batal, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) data);
   untuk (i = 0; i & lt; 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 fungsi yang disebut";

   / * Buka basis data * /
   rc = sqlite3_open ( "test.db", & db);
   if (rc) {
      fprintf (stderr, "Tidak bisa membuka database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Lain {
      fprintf (stderr, "Database Dibuka berhasil \ n");
   }

   / * Buat pernyataan SQL digabung * /
   sql = "UPDATE PERUSAHAAN mengatur GAJI = 25.000,00 mana ID = 1;" \
         "SELECT * dari PERUSAHAAN";

   / * Jalankan pernyataan SQL * /
   rc = sqlite3_exec (db, sql, callback, (void *) data, & zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "SQL error:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Lain {
      fprintf (stdout, "Operasi berhasil dilakukan \ n");
   }
   sqlite3_close (db);
   return 0;
}

Ketika program di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

database yang dibuka berhasil
fungsi callback disebut: ID = 1
NAME = Paul
AGE = 32
ALAMAT = California
GAJI = 25000,0

fungsi callback disebut: ID = 2
NAME = Allen
AGE = 25
ALAMAT = Texas
GAJI = 15000,0

fungsi callback disebut: ID = 3
NAME = Teddy
AGE = 23
ALAMAT = Norwegia
GAJI = 20000,0

fungsi callback disebut: ID = 4
NAME = Mark
AGE = 25
ALAMAT = Rich-Mond
GAJI = 65000,0

Operasi berhasil dilakukan

operasi DELETE

Berikut cuplikan kode C menunjukkan bagaimana menggunakan pernyataan DELETE menghapus catatan apapun, dan kemudian diambil dari tabel PERUSAHAAN dan menampilkan rekaman yang tersisa:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

static int callback (data * batal, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) data);
   untuk (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 fungsi yang disebut";

   / * Buka basis data * /
   rc = sqlite3_open ( "test.db", & db);
   if (rc) {
      fprintf (stderr, "Tidak bisa membuka database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Lain {
      fprintf (stderr, "Database Dibuka berhasil \ n");
   }

   / * Buat pernyataan SQL digabung * /
   sql = "DELETE dari PERUSAHAAN mana ID = 2;" \
         "SELECT * dari PERUSAHAAN";

   / * Jalankan pernyataan SQL * /
   rc = sqlite3_exec (db, sql, callback, (void *) data, & zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "SQL error:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Lain {
      fprintf (stdout, "Operasi berhasil dilakukan \ n");
   }
   sqlite3_close (db);
   return 0;
}

Ketika program di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

database yang dibuka berhasil
fungsi callback disebut: ID = 1
NAME = Paul
AGE = 32
ALAMAT = California
GAJI = 20000,0

fungsi callback disebut: ID = 3
NAME = Teddy
AGE = 23
ALAMAT = Norwegia
GAJI = 20000,0

fungsi callback disebut: ID = 4
NAME = Mark
AGE = 25
ALAMAT = Rich-Mond
GAJI = 65000,0

Operasi berhasil dilakukan