Выполнение кода sql. Функция sqlite3_exec

Последнее обновление: 30.04.2023

Для выполнения инструкций SQL в базе данных применяется функция sqlite3_exec(), которая имеет следующее определение:

int sqlite3_exec(
  sqlite3*,                                  /* подключение к бд */
  const char *sql,                           /* код инструкций SQL */
  int (*callback)(void*,int,char**,char**),  /* функция обратного вызова */
  void *,                                    /* аргумент для функции обратного вызова */
  char **errmsg                              /* сообщение об ошибке */
);

Эта функция принимает пять параметров:

  1. Первый параметр представляет указатель на подключение к базе данных

  2. Второй параметр - строка с выполняемыми инструкциями SQL

  3. Третий параметр - указатель на функцию, которая вызывается после выполнения SQL-инструкции. Эта функция имеет тип int (*callback)(void*,int,char**,char**) и может обработать извлеченные из бд данные.

  4. Четверый параметр представляет значение для параметра функции обратного вызова

  5. Последний параметр представляет сообщение об ошибке

Создание таблицы

Для создания таблицы в 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 и увидеть созданную таблицу

Создание таблицы SQLIte в языке C
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850