Чтение столбцов строки в 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.