Пустые ячейки 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.