Параметры запроса в Rust
Значения в запрос передают отдельно от
текста SQL. В шаблоне оставляют метку
?1, ?2 и дальше, а список
значений идет вторым аргументом. Так
имя пользователя не смешивается с командами
языка запросов.
Найдем строку по ключу через метку:
use rusqlite::{Connection, params};
fn name_by_id(target: i64) -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
let mut stmt = conn.prepare("SELECT name FROM user WHERE id = ?1")?;
let mut rows = stmt.query(params![target])?;
if let Some(row) = rows.next()? {
let name: String = row.get(0)?;
println!("{}", name);
}
Ok(())
}
fn main() {
match name_by_id(2) {
Ok(()) => {}
Err(e) => println!("{}", e),
}
}
Метка ?1 получает первое значение
из списка. Порядок меток и порядок
значений должны совпадать.
Вставку тоже оформляют с метками, а не встроенным текстом имени:
use rusqlite::{Connection, params};
fn add_named(id: i64, label: &str) -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
conn.execute(
"INSERT INTO user (id, name) VALUES (?1, ?2)",
params![id, label],
)?;
Ok(())
}
fn main() {
match add_named(7, "gus") {
Ok(()) => println!("saved"),
Err(e) => println!("{}", e),
}
}
Дана таблица:
CREATE TABLE user (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
Выберите имя при id равном
3 через метку ?1
и выведите его.
Даны значения:
8 hana
Добавьте строку в user с двумя
метками и выведите hana после
успешной вставки.
Скажите, почему имя нельзя вставлять в текст запроса простой склейкой строк.