はじめに
Flutterアプリケーションのデータ管理を効率的に行うためには、ローカルデータベースの活用が重要です。その中でもDriftというパッケージは、SQLを直接書くことなく、データベースの操作が可能になります。この記事では、Driftを使用してデータをデータベースにInsert(挿入)する方法について詳しく解説します。
Driftパッケージについて
Driftは、SQLiteデータベースを扱うためのパワフルなツールキットです。Flutterで使うことができ、データベースの操作を簡単に行うことができます。
Driftについてもチュートリアルはこちらを参照にしてください
前提
前提として下記のテーブル定義のクラスがあります
import 'package:drift/drift.dart';
class Users extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text().withLength(min: 1, max: 50)();
}
各ユーザーはid
とname
の二つのフィールドを持つとします。
データの登録
基本的な登録方法
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操作:詳細なガイド