SuperAPI AI 工具集

rusqlite-guide

数据与分析

查看项目

更新于 10-15 20:31

技能介绍

本指南面向使用 Rust 的 rusqlite 操作 SQLite 的开发场景,按主题给出可直接参考的写法。

用途:在单用户或本地应用中使用 rusqlite 连接 SQLite,完成数据读写、迁移和全文检索。

依赖配置:在 Cargo.toml 中声明 rusqlite(含 bundled 特性)与 dirs,用于系统数据目录: rusqlite = { version = "0.32", features = ["bundled"] } dirs = "5.0"

连接:Connection::open("app.db") 为文件数据库,Connection::open_in_memory() 用于测试;可用 dirs::data_local_dir() 拼出各系统数据目录路径,例如 Linux 的 ~/.local/share/myapp/app.db、Windows 的 AppData\Local\myapp\app.db。初始化时执行 PRAGMA foreign_keys = ON 并运行迁移。

CRUD:INSERT 用 conn.execute 配合 params!,last_insert_rowid() 取新 ID;单行查询用 query_row;多行用 prepare 加 query_map 收集为 Vec;UPDATE、DELETE 同为 execute。命名参数用 named_params! 以 :name 占位。

事务:conn.transaction() 开启,tx.execute 执行多条语句,tx.commit() 提交;提交前出错会在 drop 时自动回滚。

迁移:读取 PRAGMA user_version,按版本号依次用 include_str! 执行 SQL 文件并更新 user_version。

FTS5 全文搜索:以 CREATE VIRTUAL TABLE ... USING fts5 建立虚拟表,可用 content 与 content_rowid 关联外部内容表,并通过 AFTER INSERT 等触发器同步索引;查询时用 MATCH,配合 snippet() 生成片段、ORDER BY rank 排序。查询语法支持单词、多词 AND、前缀 hand*、短语 "error handling"、OR、NOT。

错误处理:用 rusqlite::Error 定义自有错误枚举,并将 QueryReturnedNoRows 映射为 NotFound。

对比:rusqlite 为同步、手动迁移,无编译期检查与原生 ENUM,全文搜索用 FTS5,适合单用户应用;SQLx 使用 query! 宏做编译期检查、异步连接、sqlx-cli 迁移,全文搜索用 tsvector,适合多用户 SaaS。

限制:资料未提供具体运行环境要求、性能数据与完整项目结构,相关事实暂未提供。