Для выполнения инструкций SQL в базе данных применяется функция sqlite3_exec(), которая имеет следующее определение:
int sqlite3_exec( sqlite3*, /* подключение к бд */ const char *sql, /* код инструкций SQL */ int (*callback)(void*,int,char**,char**), /* функция обратного вызова */ void *, /* аргумент для функции обратного вызова */ char **errmsg /* сообщение об ошибке */ );
Эта функция принимает пять параметров:
Первый параметр представляет указатель на подключение к базе данных
Второй параметр - строка с выполняемыми инструкциями SQL
Третий параметр - указатель на функцию, которая вызывается после выполнения SQL-инструкции. Эта функция имеет тип int (*callback)(void*,int,char**,char**)
и может обработать извлеченные из бд данные.
Четверый параметр представляет значение для параметра функции обратного вызова
Последний параметр представляет сообщение об ошибке
Для создания таблицы в SQLite применяется инструкция CREATE TABLE
. Например, создадим в базе данных "test.db" таблицу people:
#include <stdio.h> #include <sqlite3.h> int main() { sqlite3 *db; // указатель на базу данных char *err_msg = 0; // сообщение об ошибке // создаем базу данных int rc = sqlite3_open("test.db", &db); // если подключение прошло неудачно if (rc != SQLITE_OK) { sqlite3_close(db); return 1; } char *sql = "DROP TABLE IF EXISTS people;" "CREATE TABLE people(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER);"; rc = sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc != SQLITE_OK ) { printf("SQL error: %s\n", err_msg); sqlite3_free(err_msg); // очищаем ресурсы sqlite3_close(db); return 1; } sqlite3_close(db); printf("Table created\n"); return 0; }
В функцию sqlite3_exec()
передается инструкция CREATE TABLE
, которая создает таблицу "people" с тремя столбцами. Столбец id представляет
идентификатор пользователя, хранит данные типа Integer, то есть число, и также представляет первичный ключ, значение которого будет автоматически генерироваться и
инкрементироваться с каждой новой строкой. Второй столбец - name представляет строку - имя пользователя. И третий столбец - age представляет возраст пользователя.
Если таблица "people" уже существует, то предварительно удаляем ее с помощью команды "DROP TABLE IF EXISTS people"
На случай возникновения ошибки также передается строка для сообщения об ошибке - err_msg
rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
Функция обратного вызова и ее аргумент здесь не важны, поэтому для них передаются числа 0.
Стоит отметить, что, если выполнение SQL-команды прошло не успешно (то есть результат функции не равен значению константы SQLITE_OK), то очищаем память, выделенную для сообщения
об ошибке, с помощью функции sqlite3_free()
sqlite3_free(err_msg);
После выполнения программы мы можем открыть базу данных в каком-нибудь браузере баз данных SQLite, например, в DB Browser for SQLite и увидеть созданную таблицу