SQLite представляет одну из самых популярных систем баз данных. И мы можем использовать SQLite в наших приложениях на языке C. Более того сама SQLite написана на языке C.
Для работы с SQlite нам необходимы соответствующие файлы. Самый простой вариант - взять файлы с исходным кодом с официального сайта SQLite со страницы https://www.sqlite.org/download.html:
Нужный нам файл называется "sqlite-amalgamation-xxxxxxxxx.zip". Он представляет архив с исходными файлами SQLite. Если мы его загрузим и распакуем, то увидим в нем несколько файлов:
Здесь нас будут интересовать два файла: sqlite3.c и sqlite3.h. Положим из в одну папку с главным файлом программы (допустим, он называется app.c):
Для создания подключения к базе данных применяется функция sqlite3_open
int sqlite3_open(const char *filename, sqlite3 **ppDb );
Первый параметр функции представляет имя файла базы данных. Второй параметр - объект sqlite3**
, который и будет представлять подключение к базе данных. Через
объект sqlite3
в дальнейшем можно взаимодействовать с базой данных.
Результатом функции является числовой код. Если он равен значению константы SQLITE_OK
(число 0), то подключение к бд успешно установлено. Если же он равен 1 или представляет другое число,
то произошла ошибка.
После завершения работы с базой данных следует закрыть подключение. Для этого применяется функция sqlite3_close()
int sqlite3_close(sqlite3*);
В качестве параметра функция принимает указатель на закрываемое подключение. И также возвращает числовой код результата (0 - при успешном закрытии).
Например, откроем и закроем подключение к базе данных:
#include <stdio.h> #include "sqlite3.h" int main() { sqlite3 *db; // указатель на базу данных // открываем подключение к базе данных int result = sqlite3_open("test.db", &db); printf("result = %d\n", result); // закрываем подключение sqlite3_close(db); }
Поскольку мы используем функционал SQLite, то при компиляции нам также надо передать компилятору файл sqlite3.c:
gcc app.c sqlite3.c -o app
После выполнения скомпилированного файла app в папке программы должен появиться файл базы данных "test.db". А на консоли в случае успешного выполнения будет выведено
result = 0
Предложенный выше способ подключения SQLite имеет преимущества - мы имеет доступ к исходникам и можем компилировать приложения вне зависимости от компилятора и окружения - GCC, Clang, Visual Studio. Однако, для этого нам надо как минимум загрузать файлы с исходным кодом, и, кроме того, компиляция программы можем занять некоторое время. Если мы используем GCC, то мы можем упростить задачу. Чуть изменим исходный код:
#include <stdio.h> #include <sqlite3.h> int main() { sqlite3 *db; // указатель на базу данных // открываем подключение к базе данных int result = sqlite3_open("test.db", &db); printf("result = %d\n", result); // закрываем подключение sqlite3_close(db); }
Здесь файл "sqlite3.h" подключается как глобальный заголовочный файл.
А при компиляции добавим библиотеку sqlite3
с помощью опции компиляции -l
:
gcc app.c -o app -l sqlite3
Вполне возможно, что при попытке установить подключение с базой данных возникнет ошибка. SQLite предоставляет функцию sqlite3_errmsg()
, которая позволяет из указателя
на базу данных получить описание ошибки в виде строки:
const char *sqlite3_errmsg(sqlite3*);
Например, выведем сообщение об ошибке при неудачной попытке установить подключение:
#include <stdio.h> #include <sqlite3.h> int main() { sqlite3 *db; // указатель на базу данных // открываем подключение к базе данных int result = sqlite3_open("test.db", &db); // если подключение успешно установлено if(result == SQLITE_OK) { printf("Connection established\n"); } else { // выводим сообщение об ошибке fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db)); } // закрываем подключение sqlite3_close(db); }