Flutter/DartでDriftパッケージを使用したデータのInsert方法

flutter

はじめに

Flutterアプリケーションのデータ管理を効率的に行うためには、ローカルデータベースの活用が重要です。その中でもDriftというパッケージは、SQLを直接書くことなく、データベースの操作が可能になります。この記事では、Driftを使用してデータをデータベースにInsert(挿入)する方法について詳しく解説します。

Driftパッケージについて

Driftは、SQLiteデータベースを扱うためのパワフルなツールキットです。Flutterで使うことができ、データベースの操作を簡単に行うことができます。

Driftについてもチュートリアルはこちらを参照にしてください

Flutterでのローカルデータベース管理:Driftパッケージの紹介
はじめに Flutter開発者として、ローカルデータベースの操作はアプリケーションのパフォーマンスとユーザーエクスペリエンスに大きく影響します。この記事では、この課題を解決する助けとなるパッケージ、Driftについて紹介します。 参照)Dr...

前提

前提として下記のテーブル定義のクラスがあります

import 'package:drift/drift.dart';

class Users extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get name => text().withLength(min: 1, max: 50)();
}

各ユーザーはidnameの二つのフィールドを持つとします。

データの登録

基本的な登録方法

final db = MyDatabase();
final newUser = UsersCompanion(
  name: Value('Alice'),
);

final id = await db.into(db.users).insert(newUser);

このコードは、nameが’Alice’の新しいユーザーをUsersテーブルに挿入します。挿入が成功すると、新しいユーザーのIDが返されます。

MyDatabaseは、プロジェクトで作成しているデータベース定義クラスです

すでに存在する場合は更新(upsert)

次は、すでに登録したいユーザのPrimary keyが登録済みの場合には上記のようにするとエラーになります。
それを解消するためにupsertの処理が必要になります。
Driftではその機能も存在していて、下記のようにします

final db = MyDatabase();
final newUser = UsersCompanion(
  id : 1,
  name: Value('Alice'),
);

final id = await db.into(db.users).insertOnConflictUpdate(newUser);

複数レコードをまとめて登録

複数レコードをまとめて登録するにはbatchを利用して、登録します。

final db = MyDatabase();
db.batch((batch) {
  batch.insertAll(
    db.users,
    [
      UsersCompanion.insert(name: 'Charlie'),
      UsersCompanion.insert(name: 'Dave'),
    ],
  );
});

こちらでもupsertの処理が利用でき、insertAllをinsertAllOnConflictUpdateに変えることで同一Primary keyの際は更新することができます

insert時の戻り値を登録したデータで取得する

insert時に戻り値として取得できるのは設定しているidが取得されますが登録したデータ丸ごと取得したい場合は下記のようにします

final db = MyDatabase();
final newUser = UsersCompanion(
  name: Value('Alice'),
);

final registeredUser = await db.into(db.users).insertReturning(newUser);

こうすることで登録したUserDataクラスのデータが取得できます。

まとめ

以上が、Driftパッケージを使用したデータのInsert方法についての詳細な説明です。Driftは強力で柔軟性のあるツールであり、データベース操作を容易にすることができます。これらの基本的な概念を理解した上で、さらに詳細な操作や応用的な機能について学ぶことをお勧めします。また、公式ドキュメンテーションも参考にすると良いでしょう。

データの検索や更新、削除については下記を参考にしてください

Flutter/DartのDriftパッケージでのSELECT操作:詳細なガイド

Flutter/DartのDriftパッケージでのSELECT操作:詳細なガイド
はじめに Flutter開発者として、データベースの操作は日常的な作業の一部であり、その中でもSELECT操作はデータベースから情報を取り出す基本的な方法です。この記事では、FlutterのDriftパッケージを使用してSELECT操作を行...