Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpDbNl 224 of 288 menu
◀ ▶

Пустые ячейки NULL в Rust

В SQL пустая ячейка обозначается NULL. Она не равна ни нулю, ни пустой строке. В Rust такой столбец читают как Option: либо значение, либо отсутствие.

Добавим необязательное поле и прочитаем его:

use rusqlite::{Connection, params}; fn read_nick(id: i64) -> Result<(), rusqlite::Error> { let conn = Connection::open("app.db")?; conn.execute( "CREATE TABLE IF NOT EXISTS user ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, nick TEXT )", [], )?; let nick: Option<String> = conn.query_row( "SELECT nick FROM user WHERE id = ?1", params![id], |row| row.get(0), )?; match nick { Some(text) => println!("{}", text), None => println!("empty"), } Ok(()) } fn main() { match read_nick(1) { Ok(()) => {} Err(e) => println!("{}", e), } }

При NULL в файле на экране empty. При тексте в ячейке печатается сам текст.

Вставку тоже оформляют через необязательное значение:

use rusqlite::{Connection, params}; fn add_optional() -> Result<(), rusqlite::Error> { let conn = Connection::open("app.db")?; conn.execute( "INSERT INTO user (id, name, nick) VALUES (?1, ?2, ?3)", params![2, "bob", Option::<String>::None], )?; Ok(()) } fn main() { if let Err(e) = add_optional() { println!("{}", e); } }

Дана таблица:

CREATE TABLE user ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, nick TEXT );

Прочитайте nick для строки, где ячейка пустая, и выведите none.

Дана строка:

3 cara lite

Выведите nick как текст, если значение есть.

Скажите, почему NULL нельзя читать сразу в String без Option.

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