📦
ローカルデータベース(sqflite)を使ってみた
はじめに
アプリ開発におけるローカルデータベースの利用機会は多いですよね。この記事では、sqfliteを使用してローカルデータベースを実装した方法を共有したいと思います。
sqfliteパッケージの概要
- Flutterアプリ内でSQLiteデータベースを使用するためのパッケージ
- 軽量でありながら、デバイス内にデータを保存する組み込み型のデータベース
- SQLiteデータベースの作成、テーブルの定義、データの読み書きなどが簡単に行える
※sqflite公式パッケージ
実装例
SQL helpersを実装してみました。
- 記載内容
- execute
- openDatabase
- query
- insert
- update
- delete
// テーブルの作成
static Future<void> createTables(sql.Database database) async {
await database.execute("""CREATE TABLE items(
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
title TEXT,
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)
""");
}
//データベースに接続
static Future<sql.Database> db() async {
return sql.openDatabase(
//パス指定
'my.db',
version: 1,
onCreate: (sql.Database database, int version) async {
await createTables(database);
},
);
}
//データの取得
static Future<List<Map<String, dynamic>>> getItems() async {
final db = await SQLHelper.db();
return db.query('items', orderBy: "id");
}
//itemsテーブルにデータを追加
static Future<int> createItem(String title) async {
final db = await SQLHelper.db();
final data = {'title': title};
final id = await db.insert('items', data,
conflictAlgorithm: sql.ConflictAlgorithm.replace);
return id;
}
//レコードの更新
static Future<int> updateItem(int id, String title) async {
final db = await SQLHelper.db();
final data = {'title': title, 'updatedAt': DateTime.now().toString()};
final result = await db.update(
'items',
data,
where: "id = ?",
whereArgs: [id],
);
return result;
}
//レコードの削除
static Future<void> deleteItem(int id) async {
final db = await SQLHelper.db();
try {
await db.delete("items", where: "id = ?", whereArgs: [id]);
} catch (err) {
debugPrint("$err");
}
}
Discussion