Вставка строк в SQLite
Запрос INSERT INTO перечисляет столбцы и
значения для новой строки.
Его выполняют через sqlite3_exec или подготовленный
запрос. Функция sqlite3_changes возвращает,
сколько строк изменил последний запрос. Для одной
вставки это обычно 1:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
if (sqlite3_open("ledger.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 entries ("
"id INTEGER PRIMARY KEY,"
"tag TEXT NOT NULL,"
"amount INTEGER 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 entries (tag, amount) "
"VALUES ('fuel', 420)",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
std::cout << sqlite3_changes(db) << "\n";
sqlite3_close(db);
return 0;
}
Несколько вставок подряд накапливают строки в одной
таблице. После каждого успешного INSERT
счетчик можно прочитать отдельно:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
if (sqlite3_open("ledger.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 entries ("
"id INTEGER PRIMARY KEY,"
"tag TEXT NOT NULL,"
"amount INTEGER 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 entries (tag, amount) "
"VALUES ('rent', 900)",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
int first = sqlite3_changes(db);
if (sqlite3_exec(
db,
"INSERT INTO entries (tag, amount) "
"VALUES ('tax', 150)",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
int second = sqlite3_changes(db);
std::cout << first + second << "\n";
sqlite3_close(db);
return 0;
}
Создайте таблицу beacons в signal.db
и добавьте запись с кодом "north" и уровнем
7. Выведите число затронутых строк.
Добавьте вторую запись с кодом "south"
и уровнем 3. Выведите сумму счетчиков
обеих вставок.