gpt4 book ai didi

rust - 如何在 Rust 的同一结构中存储 rusqlite Connection 和 Statement 对象?

转载 作者:行者123 更新时间:2023-11-29 07:45:31 26 4
gpt4 key购买 nike

<分区>

我正在开发我的第一个 Rust 程序,并且与 Rust 所有权语义发生冲突。我已经声明了一个 struct ,它将封装一个 SQLite 数据库连接,因此它维护一个 Connection 成员。出于性能原因,我还想保留一个准备好的语句,由 Statement 类型表示。这是我的代码的简化版本:

extern crate rusqlite; // 0.14.0

use rusqlite::{Connection, Statement};

pub struct Foo<'a> {
conn: Connection,
statement: Statement<'a>,
}

impl<'a> Foo<'a> {
pub fn new() -> Foo<'a> {
let conn = Connection::open(&":memory:").unwrap();
let statement = conn
.prepare("INSERT INTO Foo(name, hash) VALUES($1, $2)")
.unwrap();
Foo { conn, statement }
}
}

我试图通过将 conn 变量的所有权存储在 Foo 的成员中来将其转移给被调用者,但是当我尝试编译此代码时它失败了:

error[E0597]: `conn` does not live long enough
--> src/main.rs:13:25
|
13 | let statement = conn
| ^^^^ borrowed value does not live long enough
...
17 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the lifetime 'a as defined on the impl at 10:6...
--> src/main.rs:10:6
|
10 | impl<'a> Foo<'a> {
| ^^

出于某种原因,rusqlite::Connection 类型没有使用生命周期参数,所以我无法明确地将其生命周期与 Statement 的生命周期联系起来实例。

我错过了什么?这种封装是一种非常常见的模式,我确定我遗漏了什么。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com