Latest web development tutorials

SQLite - C / C ++

устанавливать

В программе / C ++ в C перед использованием SQLite, мы должны гарантировать, что есть библиотека SQLite на машине. Вы можете просмотреть раздел SQLite установки для процесса установки.

C / C ++ интерфейс API

Ниже приведены важные C & C ++ интерфейс программы / SQLite для удовлетворения ваших потребностей, используя базу данных SQLite в C / C ++ программах на языке Си. Если вам нужно больше информации, смотрите официальную документацию 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 禁止关闭的错误消息。

Подключение к базе данных

Следующий код C фрагмент кода показывает, как подключиться к существующей базе данных. Если база данных не существует, он будет создан, и, наконец, возвращает объект базы данных.

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

INT главный (INT ARGC, символ * ARGV [])
{
   sqlite3 * дБ;
   символ * zErrMsg = 0;
   INT гс;

   гс = sqlite3_open ( "test.db", и БД);

   если (RC) {
      fprintf (STDERR, "Не удается открыть базу данных:% s \ п", sqlite3_errmsg (дБ));
      выход (0);
   } Else {
      fprintf (STDERR, "Открытая база данных успешно \ п");
   }
   sqlite3_close (дБ);
}

Теперь, давайте скомпилировать и запустить эту программу, создать нашуtest.db базу данных в текущем каталоге.Вы можете изменить путь по мере необходимости.

$ Gcc test.c -l sqlite3
$. / A.out
Открытая база данных успешно

Если вы хотите использовать C ++ исходный код может быть составлен в соответствии со следующим кодом показывает:

$ G ++ test.c -l sqlite3

Здесь наши программы Скачать Ссылки Sqlite3 библиотека для программы C, чтобы обеспечить необходимые функции. Это создаст файл базы данных test.db в каталоге, вы получите следующие результаты:

-rwxr-хт-х. 1 корень корень 7383 8 мая 2:06 a.out
-RW-R - r-- 1 корень корень 323 8 мая 2:05 test.c.
-RW-R - r-- 1 корень корень 0 8 мая 2:06 test.db.

Создать таблицу

Следующий код C фрагмент кода будет использоваться для создания таблицы в базе данных ранее созданного:

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

статические INT обратного вызова (аннулируются * NotUsed, INT ARGC, символ ** ARGV, символ ** azColName) {
   Int я;
   для (я = 0; я & л; ARGC; я ++) {
      Е ( "% S =% s \ п", azColName [я], ARGV [я] ARGV [я]: "NULL");
   }
   Е ( "\ п");
   возвращает 0;
}

INT главный (INT ARGC, символ * ARGV [])
{
   sqlite3 * дБ;
   символ * zErrMsg = 0;
   INT гс;
   символ * SQL;

   / * Открытая база данных * /
   гс = sqlite3_open ( "test.db", и БД);
   если (RC) {
      fprintf (STDERR, "Не удается открыть базу данных:% s \ п", sqlite3_errmsg (дБ));
      выход (0);
   } Else {
      fprintf (STDOUT, "Открытая база данных успешно \ п");
   }

   / * Создание SQL-оператор * /
   SQL = "CREATE TABLE COMPANY (" \
         "ID INT PRIMARY KEY NOT NULL," \
         "NAME TEXT NOT NULL," \
         "AGE INT NOT NULL," \
         "АДРЕС СИМ (50)," \
         "ЗАРПЛАТА REAL);";

   / * Выполнить инструкцию SQL * /
   гс = sqlite3_exec (дБ, SQL, обратный вызов, 0, & zErrMsg);
   если (гс! = SQLITE_OK) {
   fprintf (STDERR, "ошибка SQL:% s \ п", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (STDOUT, "Таблица успешно создана \ п");
   }
   sqlite3_close (дБ);
   возвращает 0;
}

Когда выше программа компилируется и запускается, он создает таблицу компанию в test.db файл, окончательный список файлов следующим образом:

-rwxr-хт-х. 1 корень корень 9567 8 мая 2:31 a.out
-RW-R - r-- 1 корень корень 1207 8 мая 2:31 test.c.
-RW-R - r-- 1 корень корень 3072 8 мая 2:31 test.db.

операции ВСТАВИТЬ

Следующий код C фрагмент кода показывает, как создать записи в таблице компании, созданной выше:

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

статические INT обратного вызова (аннулируются * NotUsed, INT ARGC, символ ** ARGV, символ ** azColName) {
   Int я;
   для (я = 0; я & л; ARGC; я ++) {
      Е ( "% S =% s \ п", azColName [я], ARGV [я] ARGV [я]: "NULL");
   }
   Е ( "\ п");
   возвращает 0;
}

INT главный (INT ARGC, символ * ARGV [])
{
   sqlite3 * дБ;
   символ * zErrMsg = 0;
   INT гс;
   символ * SQL;

   / * Открытая база данных * /
   гс = sqlite3_open ( "test.db", и БД);
   если (RC) {
      fprintf (STDERR, "Не удается открыть базу данных:% s \ п", sqlite3_errmsg (дБ));
      выход (0);
   } Else {
      fprintf (STDERR, "Открытая база данных успешно \ п");
   }

   / * Создание SQL-оператор * /
   SQL = "INSERT INTO COMPANY (ID, имя, отчество, возраст, адрес, ЗАРПЛАТА)" \
         "VALUES (1, 'Paul', 32, 'Калифорния', 20000.00);" \
         "INSERT INTO COMPANY (ID, имя, возраст, адрес, ЗАРПЛАТУ)" \
         "VALUES (2, 'Аллен', 25, 'Texas', 15000.00);" \
         "INSERT INTO COMPANY (ID, имя, возраст, адрес, ЗАРПЛАТУ)" \
         "ЗНАЧЕНИЯ (3, 'Teddy', 23 'Норвегия', 20000.00);" \
         "INSERT INTO COMPANY (ID, имя, возраст, адрес, ЗАРПЛАТУ)" \
         "ЗНАЧЕНИЯ (4, 'Марк', 25 'Rich-Mond', 65000.00);";

   / * Выполнить инструкцию SQL * /
   гс = sqlite3_exec (дБ, SQL, обратный вызов, 0, & zErrMsg);
   если (гс! = SQLITE_OK) {
      fprintf (STDERR, "ошибка SQL:% s \ п", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (STDOUT, "Отчеты, созданные успешно \ п");
   }
   sqlite3_close (дБ);
   возвращает 0;
}

Когда выше программа компилируется и выполняется, это создаст в таблице Компанию для данной записи, и отображает следующие две строки:

Открытая база данных успешно
Записи успешно создана

выбирать операции

Перед тем, как приступить к работе объяснения документированных примеров, давайте сначала понять некоторые детали функции обратного вызова, которая будет наш пример для использования. Этот обратный вызов предоставляет результаты, полученные из метода выполнения оператора SELECT. Она объявлена ​​следующим образом:

ЬурейеЕ Int (* sqlite3_callback) (
пустота *, / * Данные, предоставленные в 4-й аргумент sqlite3_exec () * /
INT, / * Количество столбцов в строке * /
символ **, / * Массив строк, представляющих поля в строке * /
символ ** / * Массив строк, представляющих имена столбцов * /
);

Если выше обратного вызова в качестве третьего параметра в sqlite_exec процедуры (), а затем SQLite SQL для каждой записи в пределах параметров каждого процесса выбора выполнения оператора вызывает функцию обратного вызова.

Следующий код C фрагмент кода показывает, как получить из таблицы компании, созданной ранее и отображает запись:

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

статические INT обратного вызова (недействительными * данные, INT ARGC, символ ** ARGV, символ ** azColName) {
   Int я;
   fprintf (STDERR, "% s:", (Const символ *) данных);
   для (я = 0; я & л; ARGC; я ++) {
      Е ( "% S =% s \ п", azColName [я], ARGV [я] ARGV [я]: "NULL");
   }
   Е ( "\ п");
   возвращает 0;
}

INT главный (INT ARGC, символ * ARGV [])
{
   sqlite3 * дБ;
   символ * zErrMsg = 0;
   INT гс;
   символ * SQL;
   Const символ * данные = "функция обратного вызова называется";

   / * Открытая база данных * /
   гс = sqlite3_open ( "test.db", и БД);
   если (RC) {
      fprintf (STDERR, "Не удается открыть базу данных:% s \ п", sqlite3_errmsg (дБ));
      выход (0);
   } Else {
      fprintf (STDERR, "Открытая база данных успешно \ п");
   }

   / * Создание SQL-оператор * /
   SQL = "SELECT * от компании";

   / * Выполнить инструкцию SQL * /
   гс = sqlite3_exec (дБ, SQL, обратный вызов, (недействительными *) данные, и zErrMsg);
   если (гс! = SQLITE_OK) {
      fprintf (STDERR, "ошибка SQL:% s \ п", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (STDOUT, "Операция успешно сделано \ п");
   }
   sqlite3_close (дБ);
   возвращает 0;
}

Когда выше программа компилируется и выполняется, он производит следующий результат:

Открытая база данных успешно
Callback функция называется: ID = 1
NAME = Paul
AGE = 32
АДРЕС = California
ЗАРПЛАТА = 20000,0

Callback функция называется: ID = 2
NAME = Allen
AGE = 25
АДРЕС = Texas
ЗАРПЛАТА = 15000,0

Callback функция называется: ID = 3
NAME = Teddy
AGE = 23
АДРЕС = Норвегия
ЗАРПЛАТА = 20000,0

Callback функция называется: ID = 4
NAME = Mark
AGE = 25
АДРЕС = Rich-Mond
ЗАРПЛАТА = 65000,0

Операция успешно сделано

операция UPDATE

Следующий код C фрагмент кода показывает, как использовать оператор UPDATE, чтобы обновить все записи, а затем получить из таблицы COMPANY и отображать обновленную запись:

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

статические INT обратного вызова (недействительными * данные, INT ARGC, символ ** ARGV, символ ** azColName) {
   Int я;
   fprintf (STDERR, "% s:", (Const символ *) данных);
   для (я = 0; я & л; ARGC; я ++) {
      Е ( "% S =% s \ п", azColName [я], ARGV [я] ARGV [я]: "NULL");
   }
   Е ( "\ п");
   возвращает 0;
}

INT главный (INT ARGC, символ * ARGV [])
{
   sqlite3 * дБ;
   символ * zErrMsg = 0;
   INT гс;
   символ * SQL;
   Const символ * данные = "функция обратного вызова называется";

   / * Открытая база данных * /
   гс = sqlite3_open ( "test.db", и БД);
   если (RC) {
      fprintf (STDERR, "Не удается открыть базу данных:% s \ п", sqlite3_errmsg (дБ));
      выход (0);
   } Else {
      fprintf (STDERR, "Открытая база данных успешно \ п");
   }

   / * Создать объединенное заявление SQL * /
   SQL = "UPDATE установить КОМПАНИЯ ЗАРПЛАТУ = 25000.00, где ID = 1;" \
         "SELECT * от компании";

   / * Выполнить инструкцию SQL * /
   гс = sqlite3_exec (дБ, SQL, обратный вызов, (недействительными *) данные, и zErrMsg);
   если (гс! = SQLITE_OK) {
      fprintf (STDERR, "ошибка SQL:% s \ п", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (STDOUT, "Операция успешно сделано \ п");
   }
   sqlite3_close (дБ);
   возвращает 0;
}

Когда выше программа компилируется и выполняется, он производит следующий результат:

Открытая база данных успешно
Callback функция называется: ID = 1
NAME = Paul
AGE = 32
АДРЕС = California
ЗАРПЛАТА = 25000,0

Callback функция называется: ID = 2
NAME = Allen
AGE = 25
АДРЕС = Texas
ЗАРПЛАТА = 15000,0

Callback функция называется: ID = 3
NAME = Teddy
AGE = 23
АДРЕС = Норвегия
ЗАРПЛАТА = 20000,0

Callback функция называется: ID = 4
NAME = Mark
AGE = 25
АДРЕС = Rich-Mond
ЗАРПЛАТА = 65000,0

Операция успешно сделано

операция удаления

Следующий код C фрагмент кода показывает, как использовать ВЕЬЕТЕ удаляет любые записи, а затем взяты из таблицы COMPANY и отображает оставшееся записи:

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

статические INT обратного вызова (недействительными * данные, INT ARGC, символ ** ARGV, символ ** azColName) {
   Int я;
   fprintf (STDERR, "% s:", (Const символ *) данных);
   для (я = 0; я <ARGC; я ++) {
      Е ( "% S =% s \ п", azColName [я], ARGV [я] ARGV [я]: "NULL");
   }
   Е ( "\ п");
   возвращает 0;
}

INT главный (INT ARGC, символ * ARGV [])
{
   sqlite3 * дБ;
   символ * zErrMsg = 0;
   INT гс;
   символ * SQL;
   Const символ * данные = "функция обратного вызова называется";

   / * Открытая база данных * /
   гс = sqlite3_open ( "test.db", и БД);
   если (RC) {
      fprintf (STDERR, "Не удается открыть базу данных:% s \ п", sqlite3_errmsg (дБ));
      выход (0);
   } Else {
      fprintf (STDERR, "Открытая база данных успешно \ п");
   }

   / * Создать объединенное заявление SQL * /
   SQL = "Удалить из компании, где ID = 2;" \
         "SELECT * от компании";

   / * Выполнить инструкцию SQL * /
   гс = sqlite3_exec (дБ, SQL, обратный вызов, (недействительными *) данные, и zErrMsg);
   если (гс! = SQLITE_OK) {
      fprintf (STDERR, "ошибка SQL:% s \ п", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (STDOUT, "Операция успешно сделано \ п");
   }
   sqlite3_close (дБ);
   возвращает 0;
}

Когда выше программа компилируется и выполняется, он производит следующий результат:

Открытая база данных успешно
Callback функция называется: ID = 1
NAME = Paul
AGE = 32
АДРЕС = California
ЗАРПЛАТА = 20000,0

Callback функция называется: ID = 3
NAME = Teddy
AGE = 23
АДРЕС = Норвегия
ЗАРПЛАТА = 20000,0

Callback функция называется: ID = 4
NAME = Mark
AGE = 25
АДРЕС = Rich-Mond
ЗАРПЛАТА = 65000,0

Операция успешно сделано