Latest web development tutorials

SQLite - C / C ++

zainstalować

W program w C / C ++ przed użyciem SQLite, musimy upewnić się, że nie jest SQLite Biblioteka na maszynie. Można zobaczyć SQLite punkt instalacyjny dla procesu instalacji.

C / C ++ interfejs API

Poniżej znajduje ważne C & C ++ interfejs programu / SQLite do swoich potrzeb za pomocą bazy danych SQLite w C / C ++ programów. Jeśli potrzebujesz więcej informacji, zapoznaj się z oficjalnej dokumentacji SQLite.

序号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 禁止关闭的错误消息。

Połączenia z bazą danych

Poniższy kod C fragment pokazuje, jak podłączyć do istniejącej bazy danych. Jeśli baza danych nie istnieje, zostanie utworzony, a na końcu zwraca obiekt bazy danych.

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

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;

   rc = sqlite3_open ( "test.db" i db);

   if (RC) {
      fprintf (stderr, "Nie można otworzyć bazy danych:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "Otwarty bazie pomyślnie \ n");
   }
   sqlite3_close (db);
}

A teraz skompilować i uruchomić powyższy program, tworzyć naszątest.db bazy danych w bieżącym katalogu.Można zmienić ścieżkę w miarę potrzeb.

$ Gcc test.c -l sqlite3
$. / A.out
Otwarty w bazie powodzeniem

Jeśli chcesz skorzystać z kodu źródłowego C ++ mogą być sporządzane zgodnie z poniższym kodzie:

$ G ++ test.c -l sqlite3

Oto nasz program Links Sqlite3 biblioteki dla programu C w celu zapewnienia niezbędnych funkcji. Spowoduje to utworzenie test.db pliku bazy danych w katalogu, otrzymasz następujące wyniki:

-rwxr-xr-x. 1 korzeń korzeń 7383 08 maj 02:06 a.out
-RW-r - r-- 1 root root 323 08 maja 02:05 test.c.
-RW-r - r-- 1 root root 0 08 maj 02:06 test.db.

Tworzenie tabeli

Poniższy kod C fragment zostaną wykorzystane do tworzenia tabeli w wcześniej utworzonej bazy danych:

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

static int oddzwaniania (void * NotUsed, int argc, char ** argv, char ** azColName) {
   int i;
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [w]: "null");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;

   / * Otwarcie bazy danych * /
   rc = sqlite3_open ( "test.db" i db);
   if (RC) {
      fprintf (stderr, "Nie można otworzyć bazy danych:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stdout, "Otwarty bazie pomyślnie \ n");
   }

   / * Tworzenie instrukcji SQL * /
   sql = "CREATE TABLE Company (" \
         "ID INT PRIMARY KEY NOT NULL," \
         "NAME TEXT NOT NULL," \
         "Wiek INT NOT NULL," \
         "CHAR ADDRESS (50)," \
         "Pensja Real);";

   / * Wykonanie instrukcji SQL * /
   rc = sqlite3_exec (db, SQL, oddzwanianie, 0, & zErrMsg);
   if (RC! = SQLITE_OK) {
   fprintf (stderr, "Błąd SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Tabela utworzona pomyślnie \ n");
   }
   sqlite3_close (db);
   return 0;
}

Jeżeli powyższy program jest kompilowany i wykonywany, tworzy tabelę firma w test.db pliku, ostateczną listę plików w następujący sposób:

-rwxr-xr-x. 1 korzeń korzeń 9567 08 maj 02:31 a.out
-RW-r - r-- 1 root root 1207 08 maj 02:31 test.c.
-RW-r - r-- 1 root root 3072 08 maj 02:31 test.db.

operacja INSERT

Poniższy kod C fragment pokazuje jak tworzyć rekordy w tabeli Spółka utworzyła powyżej:

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

static int oddzwaniania (void * NotUsed, int argc, char ** argv, char ** azColName) {
   int i;
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [w]: "null");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;

   / * Otwarcie bazy danych * /
   rc = sqlite3_open ( "test.db" i db);
   if (RC) {
      fprintf (stderr, "Nie można otworzyć bazy danych:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "Otwarty bazie pomyślnie \ n");
   }

   / * Tworzenie instrukcji SQL * /
   sql = "INSERT INTO Company (id, nazwisko, wiek, adres, wynagrodzenia)" \
         "Wartości (1, 'Paul', 32 'California', 20000.00);" \
         "INSERT INTO Company (id, nazwisko, wiek, adres, wynagrodzenia)" \
         "Wartości (2, 'Allen', 25 'Texas', 15000.00);" \
         "INSERT INTO Company (id, nazwisko, wiek, adres, wynagrodzenia)" \
         "Wartości (3," Miś ", 23", Norwegii, 20000.00); "\
         "INSERT INTO Company (id, nazwisko, wiek, adres, wynagrodzenia)" \
         "Wartości (4," Znak ", 25" Rich-Mond ', 65000.00); ";

   / * Wykonanie instrukcji SQL * /
   rc = sqlite3_exec (db, SQL, oddzwanianie, 0, & zErrMsg);
   if (RC! = SQLITE_OK) {
      fprintf (stderr, "Błąd SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Rekordy utworzone pomyślnie \ n");
   }
   sqlite3_close (db);
   return 0;
}

Jeżeli powyższy program jest kompilowany i wykonywany, stworzy w tabeli Spółki za dany zapis i wyświetla następujące dwa wiersze:

Otwarty w bazie powodzeniem
Rekordy utworzony pomyślnie

operacje SELECT

Zanim zaczniemy wyjaśniając udokumentowane przykłady, niech najpierw zrozumieć niektóre szczegóły funkcji zwrotnej, która będzie dla nas przykładem do użycia. Ta funkcja zwrotna zapewnia rezultaty uzyskane od wyboru metody rachunku. Jest ona zadeklarowana następująco:

typedef int (* sqlite3_callback) (
void * / * Dane zawarte w 4th argumentu sqlite3_exec () * /
int / * Liczba kolumn w wierszu * /
char ** / * Tablica ciągów znaków reprezentujących pola w wierszu * /
char ** / * Tablica ciągów znaków reprezentujących nazwy kolumn * /
);

Jeżeli powyższa funkcja zwrotna jako trzeci parametr w sqlite_exec (procedury), a następnie SQLite SQL dla każdego rekordu w ramach parametrów każdego procesu wykonania instrukcji SELECT wywołuje funkcję wywołania zwrotnego.

Poniższy kod C fragment pokazuje, jak uzyskać z tabeli Spółka utworzyła wcześniej i wyświetla zapis:

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

int statycznych oddzwaniania (void * Dane, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s", (const char *) dane);
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [w]: "null");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   const char * data = "Funkcja oddzwaniania zwany";

   / * Otwarcie bazy danych * /
   rc = sqlite3_open ( "test.db" i db);
   if (RC) {
      fprintf (stderr, "Nie można otworzyć bazy danych:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "Otwarty bazie pomyślnie \ n");
   }

   / * Tworzenie instrukcji SQL * /
   sql = "SELECT * z firmy";

   / * Wykonanie instrukcji SQL * /
   rc = sqlite3_exec (db, SQL, oddzwanianie, (void *) Dane, & zErrMsg);
   if (RC! = SQLITE_OK) {
      fprintf (stderr, "Błąd SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operacja odbywa się pomyślnie \ n");
   }
   sqlite3_close (db);
   return 0;
}

Jeżeli powyższy program jest kompilowany i wykonywany, to daje następujący wynik:

Otwarty w bazie powodzeniem
Funkcja oddzwaniania nazywa: ID = 1
NAME = Paul
Wiek = 32
Address = California
Pensja = 20000,0

Funkcja oddzwaniania nazywa: ID = 2
NAME = Allen
Wiek = 25
Address = Texas
Pensja = 15000,0

Funkcja oddzwaniania nazywa: ID = 3
NAME = Teddy
Wiek = 23
Address = Norwegii
Pensja = 20000,0

Funkcja oddzwaniania nazywa: ID = 4
NAME = Mark
Wiek = 25
Address = Rich-Mond
Pensja = 65000,0

Operacja odbywa się pomyślnie

operacja UPDATE

Poniższy kod C fragment pokazuje, jak korzystać z instrukcji UPDATE zaktualizować wszystkie rekordy, a następnie uzyskać z tabeli Spółka i wyświetlić zaktualizowaną rekord:

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

int statycznych oddzwaniania (void * Dane, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s", (const char *) dane);
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [w]: "null");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   const char * data = "Funkcja oddzwaniania zwany";

   / * Otwarcie bazy danych * /
   rc = sqlite3_open ( "test.db" i db);
   if (RC) {
      fprintf (stderr, "Nie można otworzyć bazy danych:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "Otwarty bazie pomyślnie \ n");
   }

   / * Utworzenie połączonego instrukcję SQL * /
   sql = "UPDATE COMPANY ustawić się wynagrodzenie = 25000.00 gdzie id = 1;" \
         "Select * from Spółka";

   / * Wykonanie instrukcji SQL * /
   rc = sqlite3_exec (db, SQL, oddzwanianie, (void *) Dane, & zErrMsg);
   if (RC! = SQLITE_OK) {
      fprintf (stderr, "Błąd SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operacja odbywa się pomyślnie \ n");
   }
   sqlite3_close (db);
   return 0;
}

Jeżeli powyższy program jest kompilowany i wykonywany, to daje następujący wynik:

Otwarty w bazie powodzeniem
Funkcja oddzwaniania nazywa: ID = 1
NAME = Paul
Wiek = 32
Address = California
Pensja = 25000,0

Funkcja oddzwaniania nazywa: ID = 2
NAME = Allen
Wiek = 25
Address = Texas
Pensja = 15000,0

Funkcja oddzwaniania nazywa: ID = 3
NAME = Teddy
Wiek = 23
Address = Norwegii
Pensja = 20000,0

Funkcja oddzwaniania nazywa: ID = 4
NAME = Mark
Wiek = 25
Address = Rich-Mond
Pensja = 65000,0

Operacja odbywa się pomyślnie

operacja usuwania

Poniższy kod C fragment pokazuje, jak korzystać z DELETE usuwa wszelkie rekordy, a następnie pobierane z tabeli Spółka i wyświetla pozostały do ​​nagrywania:

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

int statycznych oddzwaniania (void * Dane, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s", (const char *) dane);
   for (i = 0; i <argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [w]: "null");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   const char * data = "Funkcja oddzwaniania zwany";

   / * Otwarcie bazy danych * /
   rc = sqlite3_open ( "test.db" i db);
   if (RC) {
      fprintf (stderr, "Nie można otworzyć bazy danych:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "Otwarty bazie pomyślnie \ n");
   }

   / * Utworzenie połączonego instrukcję SQL * /
   sql = "Usuń z firmą, w której ID = 2;" \
         "Select * from Spółka";

   / * Wykonanie instrukcji SQL * /
   rc = sqlite3_exec (db, SQL, oddzwanianie, (void *) Dane, & zErrMsg);
   if (RC! = SQLITE_OK) {
      fprintf (stderr, "Błąd SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operacja odbywa się pomyślnie \ n");
   }
   sqlite3_close (db);
   return 0;
}

Jeżeli powyższy program jest kompilowany i wykonywany, to daje następujący wynik:

Otwarty w bazie powodzeniem
Funkcja oddzwaniania nazywa: ID = 1
NAME = Paul
Wiek = 32
Address = California
Pensja = 20000,0

Funkcja oddzwaniania nazywa: ID = 3
NAME = Teddy
Wiek = 23
Address = Norwegii
Pensja = 20000,0

Funkcja oddzwaniania nazywa: ID = 4
NAME = Mark
Wiek = 25
Address = Rich-Mond
Pensja = 65000,0

Operacja odbywa się pomyślnie