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

Чтение столбцов строки в Rust

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

Сравним чтение по номеру и по имени:

use rusqlite::{Connection, params}; fn show_fields(id: i64) -> Result<(), rusqlite::Error> { let conn = Connection::open("app.db")?; let mut stmt = conn.prepare("SELECT id, name FROM user WHERE id = ?1")?; let mut rows = stmt.query(params![id])?; if let Some(row) = rows.next()? { let by_index: i64 = row.get(0)?; let by_name: String = row.get("name")?; println!("{} {}", by_index, by_name); } Ok(()) } fn main() { match show_fields(1) { Ok(()) => {} Err(e) => println!("{}", e), } }

Номер 0 указывает на первый столбец списка SELECT. Имя name должно совпадать с именем столбца в таблице.

Если в запросе столбец переименован, читают уже новое имя:

use rusqlite::Connection; fn alias_read() -> Result<(), rusqlite::Error> { let conn = Connection::open("app.db")?; let label: String = conn.query_row( "SELECT name AS user_name FROM user LIMIT 1", [], |row| row.get("user_name"), )?; println!("{}", label); Ok(()) } fn main() { if let Err(e) = alias_read() { println!("{}", e); } }

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

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

Прочитайте name по имени столбца и id по номеру 0 для одной строки, выведите оба значения.

Дана строка:

2 bob

Выведите имя, обращаясь к столбцу только по текстовому имени name.

Скажите, почему номер столбца зависит от порядка в списке SELECT.

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