🌊

Tauriでデータベースを導入する(tauri-plugin-sql)

2023/12/07に公開

まえがき

筆者は、Rust に詳しくありません。したがって、Rust については参考記事様よりコピペしたものになります。

リポジトリ

https://github.com/tauri-apps/tauri-plugin-sql

導入

ターミナル
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 が実行されます。

  1. SQL の作成
  2. 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]
);

参考

GitHubで編集を提案

Discussion