Выборка одной строки в Rust
Когда нужна одна запись, используют запрос, который сразу возвращает строку или сбой. Пустой результат здесь не вариант успеха: библиотека сообщает, что строки не нашлось.
Прочитаем имя по первичному ключу:
use rusqlite::{Connection, params};
fn load_name(id: i64) -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
let name: String = conn.query_row(
"SELECT name FROM user WHERE id = ?1",
params![id],
|row| row.get(0),
)?;
println!("{}", name);
Ok(())
}
fn main() {
match load_name(1) {
Ok(()) => {}
Err(e) => println!("{}", e),
}
}
При наличии строки на экране ее имя. Если ключа нет, приходит сбой, его можно напечатать или обработать отдельной веткой.
Разберем отсутствие строки явно:
use rusqlite::{Connection, params};
fn main() {
let conn = match Connection::open("app.db") {
Ok(c) => c,
Err(e) => {
println!("{}", e);
return;
}
};
match conn.query_row(
"SELECT name FROM user WHERE id = ?1",
params![999],
|row| row.get::<_, String>(0),
) {
Ok(name) => println!("{}", name),
Err(e) => println!("missing {}", e),
}
}
Дана таблица:
5 iris
Прочитайте имя при id равном
5 одним запросом строки
и выведите его.
Дана таблица user без строки
с id 100. Попробуйте
прочитать имя для этого ключа и
выведите gone при сбое.
Скажите, чем ответ одной строки отличается от обхода нескольких строк при пустой таблице.