UPDATE задает новые значения столбцов и обычно ограничивает строки через WHERE. Без условия изменится вся таблица.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpDbUpd 607 of 696 menu
◀ ▶

Обновление строк в SQLite

Запрос UPDATE задает новые значения столбцов и обычно ограничивает строки через WHERE.

Без условия изменится вся таблица. Подготовленный шаблон связывает новое значение и ключ строки:

#include <iostream> #include <sqlite3.h> int main() { sqlite3* db = nullptr; if (sqlite3_open("revise.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 notes (" "id INTEGER PRIMARY KEY," "title TEXT NOT NULL," "done 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 notes (title, done) " "VALUES ('draft', 0)", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } sqlite3_stmt* update = nullptr; if (sqlite3_prepare_v2( db, "UPDATE notes SET done = ? WHERE id = ?", -1, &update, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_bind_int(update, 1, 1); sqlite3_bind_int(update, 2, 1); if (sqlite3_step(update) != SQLITE_DONE) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_finalize(update); sqlite3_close(db); return 1; } std::cout << sqlite3_changes(db) << "\n"; sqlite3_finalize(update); sqlite3_close(db); return 0; }

Счетчик от sqlite3_changes показывает, сколько строк реально изменилось. Текстовые поля обновляют тем же способом:

#include <iostream> #include <sqlite3.h> int main() { sqlite3* db = nullptr; if (sqlite3_open("revise.db", &db) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_stmt* update = nullptr; if (sqlite3_prepare_v2( db, "UPDATE notes SET title = ? WHERE id = ?", -1, &update, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_bind_text(update, 1, "final", -1, SQLITE_STATIC); sqlite3_bind_int(update, 2, 1); sqlite3_step(update); sqlite3_finalize(update); sqlite3_stmt* check = nullptr; if (sqlite3_prepare_v2( db, "SELECT title FROM notes WHERE id = ?", -1, &check, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_bind_int(check, 1, 1); if (sqlite3_step(check) == SQLITE_ROW) { const char* title = reinterpret_cast<const char*>( sqlite3_column_text(check, 0) ); std::cout << title << "\n"; } sqlite3_finalize(check); sqlite3_close(db); return 0; }

Создайте таблицу meters в utility.db с полями label и reading, добавьте строку и измените показание на 105 по id 1.

Переименуйте метку с "kitchen" на "hall" для той же записи и выведите новую метку.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить