sqfliteの使い方 FlutterでRDBMSを扱う
今回はsqfliteについて解説していきます。
sqfliteとは
sqfliteはFlutterアプリケーションで使えるSQLiteデータベースプラグインです。
sqfliteを使うことでFlutterアプリ内にローカルデータベースを作成し、データの保存や取得、更新、削除などを行うことが可能です。主にモバイルアプリ内でのユーザー設定の保存や、オフラインでのデータ保持などに活用されます。
sqfliteの特徴
ローカルデータベースのサポート
スマートフォン内にSQLベースのデータベースを作成し、構造化されたデータを永続的に保存できます。
基本的なCRUD機能
データの作成(Create)、読み取り(Read)、更新(Update)、削除(Delete)といった基本操作をサポートしており、データベース操作が簡単に行えます。
シンプルな操作
Flutterコード内で直接SQLコマンドを使用する形でデータ操作が可能です。シンプルなAPIを提供しているため、学習コストが比較的低いのが特徴です。
SQLiteとは
SQLiteは軽量で組み込み型のリレーショナルデータベース管理システム(RDBMS)です。
サーバーレスで動作し、データベースファイルをアプリケーションに直接組み込む形で使えるため、他のデータベースシステムに比べてインストールや設定が不要で簡単に利用できます。
sqfliteの使い方
sqfliteの導入
pubspec.yamlファイルにsqfliteとpathパッケージを追加します。
dependencies:
flutter:
sdk: flutter
sqflite: ^2.0.0+3
path: ^1.8.0
ターミナルでパッケージをインストールします。
flutter pub get
データベースの初期化とテーブルの作成
データベースを開き、ユーザー情報などを格納するテーブルを作成するコードを用意します。
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Future<Database> initializeDatabase() async {
final dbPath = await getDatabasesPath();
final path = join(dbPath, 'app_database.db');
return openDatabase(
path,
onCreate: (db, version) async {
await db.execute(
"CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)",
);
},
version: 1,
);
}
データの挿入
insertUser関数を使って、ユーザー情報をデータベースに挿入します。
Future<void> insertUser(Database db, Map<String, dynamic> user) async {
await db.insert(
'users',
user,
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
// 使用例
final db = await initializeDatabase();
await insertUser(db, {'name': 'John', 'age': 25});
データの取得
getUsers関数を作成し、usersテーブルからすべてのデータを取得します。
Future<List<Map<String, dynamic>>> getUsers(Database db) async {
return await db.query('users');
}
// 使用例
final users = await getUsers(db);
print(users); // 結果を確認
データの更新
updateUser関数を使い、指定したidのユーザー情報を更新します。
Future<void> updateUser(Database db, Map<String, dynamic> user) async {
await db.update(
'users',
user,
where: "id = ?",
whereArgs: [user['id']],
);
}
// 使用例
await updateUser(db, {'id': 1, 'name': 'Jane', 'age': 30});
データの削除
deleteUser関数で、指定したidのユーザーを削除します。
Future<void> deleteUser(Database db, int id) async {
await db.delete(
'users',
where: "id = ?",
whereArgs: [id],
);
}
// 使用例
await deleteUser(db, 1);
これでsqfliteを使ってFlutterアプリ内で簡単にローカルデータベースを操作できるようになります。