此代码
extern crate mysql;
use mysql::*;
fn main () {
let mut conn = Conn::new("mysql://root:password@127.0.0.1:3306/mydb?prefer_socket=false").unwrap();
let _q1 = conn.prepare("some query").unwrap();
let _q2 = conn.prepare("some query 2").unwrap();
}
产生错误:
error[E0499]: cannot borrow ``conn`` as mutable more than once at a time
--> src\bin\test.rs:8:12
|
7 | let _q1 = conn.prepare("some query").unwrap();
| ---- first mutable borrow occurs here
8 | let _q2 = conn.prepare("some query 2").unwrap();
| ^^^^ second mutable borrow occurs here
9 | }
| - first borrow ends here
我认为第一次借用直到第9行,因为conn.prepare(...).unwrap()
的结果是Stmt
而Stmt
被声明为
pub struct Stmt<'a> {
stmt: InnerStmt,
conn: ConnRef<'a>,
}
和ConnRef
被声明为
enum ConnRef<'a> {
ViaConnRef(&'a mut Conn), // It keeps mutable borrow as long as lifetime of connection?
ViaPooledConn(pool::PooledConn),
}
所以_q1
保持可变借用,直到conn
死亡。
如何在不产生编译时错误的情况下创建多个预准备语句?
答案 0 :(得分:0)