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

Выборка нескольких строк в Rust

Запрос выборки возвращает набор строк. Его сначала готовят, затем обходят результат и для каждой строки собирают поля в структуру или отдельные переменные.

Опишем строку таблицы и выведем имена:

use rusqlite::Connection; struct User { id: i64, name: String, } fn list_users() -> Result<(), rusqlite::Error> { let conn = Connection::open("app.db")?; let mut stmt = conn.prepare("SELECT id, name FROM user")?; let rows = stmt.query_map([], |row| { Ok(User { id: row.get(0)?, name: row.get(1)?, }) })?; for item in rows { let user = item?; println!("{}", user.name); } Ok(()) } fn main() { match list_users() { Ok(()) => {} Err(e) => println!("{}", e), } }

На экране по одной строке на каждую запись таблицы, порядок совпадает с порядком строк в файле.

Тот же обход можно сделать с печатью и ключа, и имени:

use rusqlite::Connection; fn print_pairs() -> Result<(), rusqlite::Error> { let conn = Connection::open("app.db")?; let mut stmt = conn.prepare("SELECT id, name FROM user")?; let rows = stmt.query_map([], |row| { let id: i64 = row.get(0)?; let name: String = row.get(1)?; Ok((id, name)) })?; for item in rows { let (id, name) = item?; println!("{} {}", id, name); } Ok(()) } fn main() { if let Err(e) = print_pairs() { println!("{}", e); } }

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

1 ann 2 bob

Выведите все имена по одному на строку в порядке возрастания id.

Дана таблица user с полями id и name. Запишите структуру User и обход, который печатает только id каждой строки.

Скажите, зачем запрос выборки сначала готовят, а потом обходят строки результата.

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