Tauri集成plugin-sql
最近在做一个单体的任务清单小工具,使用Tauri+Vue3开发,计划使用sqlite作为数据源存储任务信息,简单的记录集成的过程。
添加依赖
切换到src-tauri目录下,执行:
cargo add tauri-plugin-sql --features sqlite
或者直接在Cargo.toml文件中添加:
[dependencies.tauri-plugin-sql]
features = ["sqlite"]
version = "*"
注意,这个插件要求的rust版本不能低于1.80
注册组件到Tauri应用
找到Tauri的初始化方法(通常在src-tauri/src/main.rs或lib.rs中)
注册组件:
tauri::Builder::default()
.plugin(tauri_plugin_sql::Builder::new().build()) // 注册sql组件
.run(tauri::generate_context!())
.expect("error while running tauri application");
数据库迁移
- Tauri支持数据库的自动迁移功能,提前准备好迁移的sql语句,保存到sql文件中(
其实txt都行),我这里保存到了src-tauri/migrations/1_tables_tasks.sql
:
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT,
completed BOOLEAN NOT NULL DEFAULT 0,
task_type TEXT,
start TEXT NOT NULL,
end TEXT NULL,
all_day BOOLEAN NULL
);
- 在注册组件时,可以在构造tauri_plugin_sql的时候添加迁移选项来执行迁移相关的sql:
let migrations = vec![Migration {
version: 1,
description: "create_initial_tables",
sql: include_str!("../migrations/1_create_tasks_table.sql"),
kind: MigrationKind::Up,
}];
// 只保留构造部分
tauri_plugin_sql::Builder::default()
.add_migrations("sqlite:r_task.db", migrations)
.build()
这里的migrations是一个向量,可以同时指定多个迁移语句
- 到这里还没完,还需要在
src-tauri/tauri.conf.json
中添加配置,使得项目启动的时候执行上面配置的迁移
找到plugins(没有的话手动添加,Tauri2.x的plugins在最顶级),在里面添加:
"sql": {
"preload": ["sqlite:r_task.db"]
}
执行sql
- tauri-plugin-sql提供了js/ts执行sql语句的能力,需要先在访问控制列表中添加sql执行的权限
打开src-tauri/capabilities/default.json
,当然,也可以新建一个json/toml来配置,在permissions
里面添加sql的执行权限:
"sql:allow-execute"
如果不配置的话,在执行sql的时候可能会报错:
Unhandled Promise Rejection: sql.execute not allowed. Permissions associated with this command: sql:allow-execute
- 控制台切换到项目根目录,添加sql插件:
npm run tauri add sql
- 万事俱备,尝试下执行sql
// 引入插件
import Database from '@tauri-apps/plugin-sql';
// 加载数据库
const db = await Database.load('sqlite:r_task.db');
// 执行sql查询,这里也可以是异步的
db.select("select * from tasks").then(result => {
console.log(result)
});
-
打开控制台验证下
-
验证通过,撒花🎉🎉🎉