Получение данных из базы данных SQLite

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

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

int (*callback)(void*,int,char**,char**)

Первый параметр этой функции - указатель void *. По сути это может быть указатель на любой объект. Для него значение передается через четверый параметр функции sqlite3_exec(). Благодаря этому при обращении к базе данных мы можем передать в коллбек некоторые данные.

Второй параметр функции callback представляет количество столбцов в результате.

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

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

Результатом функции callback является числовой статусный код выполнения (0 при успешном выполнении).

Функция callback выполняется для каждой строки из полученного набора из базы данных.

Получение всех строк

Например, получим все ранее добавленные данные из таблицы people:

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

int callback(void*, int, char**, char**);

int main() {
    sqlite3 *db;    // указатель на базу данных
    char *err_msg = 0;
    int rc  = sqlite3_open("test.db", &db);
    if (rc != SQLITE_OK)
    {
        sqlite3_close(db);
        return 1;
    }
    // получаем все данные из таблицы people
    char *sql = "SELECT * FROM people";
    rc = sqlite3_exec(db, sql, callback, 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);
    return 0;
}

int callback(void *notUsed, int colCount, char **columns, char **colNames)
{
    for (int i = 0; i < colCount; i++)
    {
        printf("%s = %s\n", colNames[i], columns[i] ? columns[i] : "NULL");
    }
    printf("\n");
    return 0;
}

Для получения всех данных из таблицы применяется sql-команда "SELECT * FROM people". Основная работа производится в функции обратного вызова callback. В ней проходим по всем столбцам и выводим на консоль их содержимое. Если столбец равен указателю NULL, то на консоль выводим "NULL".

Первый параметр в данном случае нам не нужен, поэтому он никак не используется.

В итоге при выполнении этой программы получим консольный вывод типа следующего:

id = 1
name = Tom
age = 38

id = 2
name = Bob
age = 42

id = 3
name = Sam
age = 28

id = 4
name = Alice
age = 33

id = 5
name = Kate
age = 25

Подобным образом можно выполнять другие запросы на выборку. Например, получим тех пользователей, у которых возраст больше 28, выбрав только два столбца:

char *sql = "SELECT name, age FROM people WHERE age > 28";
rc = sqlite3_exec(db, sql, callback, 0, &err_msg);

Консольный вывод:

name = Tom
age = 38

name = Bob
age = 42

name = Alice
age = 33
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850