🌊
Tauriでデータベースを導入する(tauri-plugin-sql)
まえがき
筆者は、Rust に詳しくありません。したがって、Rust については参考記事様よりコピペしたものになります。
リポジトリ
導入
ターミナル
npm add https://github.com/tauri-apps/tauri-plugin-sql#v1
src-tauri/Cargo.toml
[dependencies.tauri-plugin-sql]
git = "https://github.com/tauri-apps/plugins-workspace"
branch = "v1"
features = ["sqlite"] # or "postgres", or "mysql"
DB の作成方法
実際には、この工程で SQL の登録が完了し、後述の「DB の利用方法」でのロードによって SQL が実行されます。
- SQL の作成
-
main.rs
での読み込み
SQL の作成
src-tauri
内にmigrations
ディレクトリを作成し、その中に.sql
を作成していきます。
main.rs
での読み込み
sample.sql
CREATE TABLE TODO(id INTEGER PRIMARY KEY, title TEXT)
fn main() {
tauri::Builder::default()
// プラグイン登録
.plugin(
tauri_plugin_sql::Builder::default()
.add_migrations(
"sqlite:sample.db", // 作成するDBの名前
vec![tauri_plugin_sql::Migration {
version: 1,
description: "create todo table",
sql: include_str!("../migrations/sample.sql"), // 読み込むSQLの指定
kind: tauri_plugin_sql::MigrationKind::Up,
}],
)
.build(),
)
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
複数の SQL ファイルを実行する場合
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
// プラグイン登録
.plugin(
tauri_plugin_sql::Builder::default()
.add_migrations(
"sqlite:sample.db",
vec![
tauri_plugin_sql::Migration {
version: 1,
description: "create table",
sql: include_str!("../migrations/sample1.sql"),
kind: tauri_plugin_sql::MigrationKind::Up,
},
tauri_plugin_sql::Migration {
version: 2,
description: "create table fro ver2",
sql: include_str!("../migrations/sample2.sql"),
kind: tauri_plugin_sql::MigrationKind::Up,
},
],
)
.build(),
)
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
DB の利用方法
ロード
ここでロードすることで SQL が実行されます。
// sqlite. The path is relative to `tauri::api::path::BaseDirectory::App`.
const db = await Database.load("sqlite:sample.db");
// mysql
const db = await Database.load("mysql://user:pass@host/database");
// postgres
const db = await Database.load("postgres://postgres:password@localhost/sample");
Execute
リポジトリのREADME.mdより
// INSERT and UPDATE examples for sqlite and postgres
const result = await db.execute(
"INSERT into todos (id, title, status) VALUES ($1, $2, $3)",
[todos.id, todos.title, todos.status]
);
const result = await db.execute(
"UPDATE todos SET title = $1, completed = $2 WHERE id = $3",
[todos.title, todos.status, todos.id]
);
// INSERT and UPDATE examples for mysql
const result = await db.execute(
"INSERT into todos (id, title, status) VALUES (?, ?, ?)",
[todos.id, todos.title, todos.status]
);
const result = await db.execute(
"UPDATE todos SET title = ?, completed = ? WHERE id = ?",
[todos.title, todos.status, todos.id]
);
Discussion