2
我想使用rusqlite的預準備語句。 Rusqlite實現性狀ToSql
爲String
,&str
和a bunch of other types:無法調用rusqlite的查詢,因爲它需要類型&[&rusqlite :: types :: ToSql]
extern crate rusqlite;
use rusqlite::Connection;
fn main() {
let mut connection = Connection::open("C:\\test_db.db").unwrap();
let mut cached_statement = connection
.prepare_cached("SELECT ?, ?, ? FROM test")
.unwrap();
let vec_values = vec![
&"test1".to_string(),
&"test2".to_string(),
&"test3".to_string(),
];
let rows = cached_statement.query(vec_values.as_slice()).unwrap();
}
這並不與錯誤編譯:
error[E0308]: mismatched types
--> src/main.rs:18:39
|
18 | let rows = cached_statement.query(vec_values.as_slice()).unwrap();
| ^^^^^^^^^^^^^^^^^^^^^ expected trait rusqlite::types::ToSql, found struct `std::string::String`
|
= note: expected type `&[&rusqlite::types::ToSql]`
found type `&[&std::string::String]`
謝謝你的非常詳細的答案。這是行不通的,因爲「std :: convert :: From <&std :: string :: String>」沒有爲「rusqlite :: types :: ToSqlOutput <'_>」實現「我還沒有嘗試過通用解決方案,但是因爲它基本上相同的代碼應該會導致相同的錯誤。 (x爲&ToSql是問題) –
@SlaterTh我不知道你的意思。我已發佈的兩段代碼都已成功編譯,現在我已添加指向整個可編譯示例的鏈接。我猜測我們中的一個人在沒有明確提及的情況下添加或刪除了某些內容。 – Shepmaster
你的代碼確實是正確的,我用&vec中的字符串....謝謝你的時間。 –