Выборка строк из SQLite
Запрос SELECT возвращает набор строк.
Его готовят функцией sqlite3_prepare_v2,
а строки обходят, пока функция sqlite3_step
возвращает SQLITE_ROW. Значения берут
функциями sqlite3_column_text и
sqlite3_column_int по номеру столбца:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
if (sqlite3_open("archive.db", &db) != SQLITE_OK) {
std::cerr << sqlite3_errmsg(db) << "\n";
sqlite3_close(db);
return 1;
}
char* err = nullptr;
if (sqlite3_exec(
db,
"CREATE TABLE IF NOT EXISTS folders ("
"id INTEGER PRIMARY KEY,"
"title TEXT NOT NULL"
")",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
if (sqlite3_exec(
db,
"INSERT INTO folders (title) VALUES ('2024')",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
if (sqlite3_exec(
db,
"INSERT INTO folders (title) VALUES ('2025')",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(
db,
"SELECT title FROM folders ORDER BY id",
-1,
&stmt,
nullptr
) != SQLITE_OK) {
std::cerr << sqlite3_errmsg(db) << "\n";
sqlite3_close(db);
return 1;
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
const char* title =
reinterpret_cast<const char*>(
sqlite3_column_text(stmt, 0)
);
std::cout << title << "\n";
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
Цикл while обходит все совпавшие записи.
Номера столбцов в SELECT идут с нуля
слева направо:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
if (sqlite3_open("archive.db", &db) != SQLITE_OK) {
std::cerr << sqlite3_errmsg(db) << "\n";
sqlite3_close(db);
return 1;
}
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(
db,
"SELECT id, title FROM folders",
-1,
&stmt,
nullptr
) != SQLITE_OK) {
std::cerr << sqlite3_errmsg(db) << "\n";
sqlite3_close(db);
return 1;
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
std::cout << sqlite3_column_int(stmt, 0) << "\n";
const char* title =
reinterpret_cast<const char*>(
sqlite3_column_text(stmt, 1)
);
std::cout << title << "\n";
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
Создайте таблицу badges в crew.db,
вставьте два названия и выведите каждое через
выборку всех строк.
Выведите идентификатор и название для каждой
записи таблицы badges отдельными
строками в консоль.