Я пишу программу, гдеМне нужно получить обратно id
из последней вставки, только что созданной sqlite.
db.execute("insert into short_names (short_name) values (?1)",params![short]).expect("db insert fail");
let id = db.execute("SELECT id FROM short_names WHERE short_name = '?1';",params![&short]).query(NO_PARAMS).expect("get record id fail");
let receiver = db.prepare("SELECT id FROM short_names WHERE short_name = "+short+";").expect("");
let id = receiver.query(NO_PARAMS).expect("");
println!("{:?}",id);
Мне нужно получить возвращаемое значение sqlite id, автоматически назначаемое с помощью AUTOINCREMENT.
Iполучаю этот компилятор Ошибка:
error[E0599]: no method named `query` found for type `std::result::Result<usize, rusqlite::Error>` in the current scope
--> src/main.rs:91:100
|
91 | let id = db.execute("SELECT id FROM short_names WHERE short_name = '?1';",params![&short]).query(NO_PARAMS).expect("get record id fail");
| ^^^^^
error[E0369]: binary operation `+` cannot be applied to type `&str`
--> src/main.rs:94:83
|
94 | let receiver = db.prepare("SELECT id FROM short_names WHERE short_name = "+short+";").expect("");
| ------------------------------------------------^----- std::string::String
| | |
| | `+` cannot be used to concatenate a `&str` with a `String`
| &str
help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left
|
94 | let receiver = db.prepare("SELECT id FROM short_names WHERE short_name = ".to_owned()+&short+";").expect("");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^
error[E0277]: `rusqlite::Rows<'_>` doesn't implement `std::fmt::Debug`
--> src/main.rs:96:25
|
96 | println!("{:?}",id);
| ^^ `rusqlite::Rows<'_>` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
|
= help: the trait `std::fmt::Debug` is not implemented for `rusqlite::Rows<'_>`
= note: required by `std::fmt::Debug::fmt`
Строка 94: Я понимаю, что строка String не подходит для вызова execute
, но я не уверен, что делатьделай вместо
Я подозреваю, что должно произойти, если таблицу short_names
нужно извлечь из базы данных, а затем из представления ржавчины таблицы, чтобы получить id
, который соответствует short
, который я пытаюсьработать с. Я использовал этот пример как отправную точку, но он разыменовал его полезность. Программа, которую я пишу, вызывает другую программу, а затем присматривает за ней во время работы этой другой программы. Чтобы сократить накладные расходы, я пытаюсь не использовать ООП для этой текущей программы.
Как мне структурировать мой запрос к базе данных, чтобы получить id
, который мне нужен?