FlutterでSQLiteデータベースを活用する: sqfliteパッケージの使い方

はじめに

現代のアプリケーションにおいて、データの保存と取り出しは必須の機能であります。多くのモバイルアプリでは、この目的のためにSQLiteデータベースが利用されます。この記事では、FlutterアプリでSQLiteデータベースを操作するためのライブラリであるsqfliteの基本的な使い方を解説します。

そのほかのライブラリも紹介していますのでこちらも参考にしてください

Flutterでのローカルデータベース管理:Driftパッケージの紹介

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

sqfliteとは?

sqfliteは、FlutterプロジェクトでSQLiteデータベースを操作するためのライブラリです。Flutterアプリでデータベースを扱う場合、このライブラリは非常に強力で便利なツールとなります。

インストール

まずは、pubspec.yamlファイルにsqfliteを追加し、パッケージをプロジェクトに取り込みます。

dependencies:
  flutter:
    sdk: flutter

  sqflite: ^2.2.8+4

その後、ターミナルで以下のコマンドを実行します。

flutter pub get

これで、sqfliteパッケージがプロジェクトに追加されます。

データベースの作成

以下のコードは、新しいSQLiteデータベースを作成し、そのデータベースにテーブルを作成する例です。

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

void createDatabase() async {
  String databasesPath = await getDatabasesPath();
  String dbPath = join(databasesPath, 'my.db');

  Database database = await openDatabase(
    dbPath,
    version: 1,
    onCreate: (Database db, int version) async {
      await db.execute(
        "CREATE TABLE Users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)",
      );
    },
  );
}

このコードでは、getDatabasesPath()関数を用いてデータベースのパスを取得し、そのパスにmy.dbという名前の新しいデータベースを作成しています。データベースが初めて作成されるとき、onCreate関数が呼び出され、その中でテーブルの作成が行われます。

データの挿入

次に、データをデータベースに挿入します。以下のコードは、新しいユーザをUsersテーブルに追加する例です。

  Future insertUser(User user) async {
    String databasesPath = await getDatabasesPath();
    String dbPath = join(databasesPath, 'my.db');

    Database database = await openDatabase(dbPath);

    await database.transaction((Transaction txn) async {
      return await txn.rawInsert(
        'INSERT INTO Users(name, age) VALUES(?, ?)',
        [user.name, user.age],
      );
    });
  }

このコードでは、transaction関数を用いてトランザクションを開始し、その中でrawInsert関数を用いてデータを挿入しています。rawInsert関数では、第一引数にSQL文を、第二引数にSQL文のプレースホルダーに代入する値のリストを指定します。

データの取得

次に、データベースからデータを取得します。以下のコードは、Usersテーブルから全てのユーザを取得する例です。

Future<List


> getUsers() async {
  String databasesPath = await getDatabasesPath();
  String dbPath = join(databasesPath, 'my.db');

  Database database = await openDatabase(dbPath);

  List<Map> result = await database.rawQuery('SELECT * FROM Users');


  result = await database.rawQuery('SELECT * FROM Users');
  return result;
}


 

 

このコードでは、rawQuery関数を用いてSQL文を実行し、結果をList<Map>型で受け取っています。

まとめ

以上が、Flutterのsqfliteパッケージを用いてSQLiteデータベースを操作する基本的な手順です。この記事が、Flutterアプリでのデータベース利用の参考になれば幸いです。

sqfliteは非常に強力なライブラリであり、本記事ではその基本的な機能を紹介しましたが、その他にもトランザクション管理やバッチ操作など、より高度なデータベース操作をサポートしています。更なる詳細については、sqfliteの公式ドキュメンテーションをご参照ください。