NULL в SQL означает отсутствие данных, а не пустую строку. Колонку без NOT NULL можно оставить незаполненной при INSERT.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpDbNul 613 of 696 menu
◀ ▶

Пустое значение поля SQL

Значение NULL в SQL означает отсутствие данных, а не пустую строку.

Колонку без NOT NULL можно оставить незаполненной при INSERT. Тип столбца проверяют функцией sqlite3_column_type; для SQLITE_NULL текст читать не нужно:

#include <iostream> #include <sqlite3.h> int main() { sqlite3* db = nullptr; if (sqlite3_open("nulls.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 memos (" "id INTEGER PRIMARY KEY," "title TEXT NOT NULL," "remark TEXT" ")", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } if (sqlite3_exec( db, "INSERT INTO memos (title) VALUES ('idea')", 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 remark FROM memos WHERE id = 1", -1, &stmt, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } if (sqlite3_step(stmt) == SQLITE_ROW) { if (sqlite3_column_type(stmt, 0) == SQLITE_NULL) { std::cout << "missing\n"; } else { const char* text = reinterpret_cast<const char*>( sqlite3_column_text(stmt, 0) ); std::cout << text << "\n"; } } sqlite3_finalize(stmt); sqlite3_close(db); return 0; }

Тот же столбец можно вывести с запасной строкой, если тип равен SQLITE_NULL:

#include <iostream> #include <sqlite3.h> int main() { sqlite3* db = nullptr; if (sqlite3_open("nulls.db", &db) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_stmt* insert = nullptr; if (sqlite3_prepare_v2( db, "INSERT INTO memos (title, remark) VALUES (?, ?)", -1, &insert, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_bind_text(insert, 1, "done", -1, SQLITE_STATIC); sqlite3_bind_text(insert, 2, "shipped", -1, SQLITE_STATIC); sqlite3_step(insert); sqlite3_finalize(insert); sqlite3_stmt* query = nullptr; if (sqlite3_prepare_v2( db, "SELECT remark FROM memos WHERE title = ?", -1, &query, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_bind_text(query, 1, "idea", -1, SQLITE_STATIC); if (sqlite3_step(query) == SQLITE_ROW) { const char* remark = nullptr; if (sqlite3_column_type(query, 0) != SQLITE_NULL) { remark = reinterpret_cast<const char*>( sqlite3_column_text(query, 0) ); } std::cout << (remark ? remark : "none") << "\n"; } sqlite3_finalize(query); sqlite3_close(db); return 0; }

Создайте таблицу items в stock.db с обязательным sku и необязательным comment, добавьте строку без комментария и выведите "empty", если поле пустое.

Добавьте строку с комментарием "fragile" и выведите текст для обеих записей, подставив строку по умолчанию, если поле пустое.

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