You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Rusqlite执行初始化脚本时仅创建第一张表?

问题原因

rusqlite的db.execute()方法仅会执行传入SQL字符串中的第一条语句——它的设计目标是处理单条SQL命令,遇到第一个分号就会停止执行后续内容,因此TestTable2的建表语句根本没有被运行。

解决方案

有两种可行的解决方式:

方法1:使用execute_batch方法替换execute

rusqlite提供了专门用于执行多条SQL语句的execute_batch方法,它会自动处理分号分隔的多条命令,修改后的代码如下:

fn main() {
    let db = rusqlite::Connection::open("test.db").unwrap();

    let command = std::fs::read_to_string("create.sql").unwrap();

    // 替换execute为execute_batch,处理多条SQL语句
    db.execute_batch(&command).unwrap();
}

方法2:拆分SQL语句逐条执行

如果需要更精细的控制(比如每条语句执行后做额外处理),可以将读取到的SQL字符串按分号拆分,过滤掉空行和无效内容后逐条执行:

fn main() {
    let db = rusqlite::Connection::open("test.db").unwrap();

    let command = std::fs::read_to_string("create.sql").unwrap();

    // 拆分语句并过滤空行、无效内容
    for stmt in command.split(';').map(|s| s.trim()).filter(|s| !s.is_empty()) {
        db.execute(stmt, []).unwrap();
    }
}

内容的提问来源于stack exchange,提问作者axolotlKing0722

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:22:33