Создание таблицы в SQLite
Структура данных задается запросом CREATE TABLE.
Ключевое слово IF NOT EXISTS не дает упасть
повторному запуску, если таблица уже есть. Целочисленный
столбец с INTEGER PRIMARY KEY часто становится
автоинкрементным идентификатором. Остальные поля
описывают обычные типы SQLite, например TEXT
и REAL:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
if (sqlite3_open("schema_lab.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 probes ("
"id INTEGER PRIMARY KEY,"
"label TEXT NOT NULL,"
"reading REAL"
")",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
sqlite3_close(db);
return 0;
}
Ограничение NOT NULL запрещает пустое значение
в колонке при вставке. После выполнения DDL таблица
probes готова к INSERT, даже если
строк пока нет. Проверим наличие имени в
sqlite_master:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
if (sqlite3_open("schema_lab.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 name FROM sqlite_master "
"WHERE type = 'table' AND name = 'probes'",
-1,
&stmt,
nullptr
) != SQLITE_OK) {
std::cerr << sqlite3_errmsg(db) << "\n";
sqlite3_close(db);
return 1;
}
int found = 0;
if (sqlite3_step(stmt) == SQLITE_ROW) {
found = 1;
}
sqlite3_finalize(stmt);
std::cout << found << "\n";
sqlite3_close(db);
return 0;
}
Создайте таблицу routes в файле
map_store.db с полями id,
code (текст, обязательный) и
distance_km (вещественное).
Проверьте через sqlite_master, что таблица
routes зарегистрирована, и выведите
true при успешной проверке.