Learn
← Previous Next →

Hari 25: SQLite & Local Database

60 min Last updated 09 Apr 2026

sqflite — SQLite untuk Flutter

// pubspec.yaml: sqflite: ^2.3.0, path: ^1.8.0
import "package:sqflite/sqflite.dart";
import "package:path/path.dart";

class DatabaseHelper {
  static Database? _db;
  static const _dbName = "todo.db";
  static const _tableTodo = "todos";

  static Future get database async {
    _db ??= await _initDatabase();
    return _db!;
  }

  static Future _initDatabase() async {
    String path = join(await getDatabasesPath(), _dbName);
    return openDatabase(path, version: 1, onCreate: _onCreate);
  }

  static Future _onCreate(Database db, int version) async {
    await db.execute("""
      CREATE TABLE $_tableTodo (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        judul TEXT NOT NULL,
        selesai INTEGER DEFAULT 0,
        dibuat TEXT DEFAULT CURRENT_TIMESTAMP
      )
    """);
  }

  // CRUD
  static Future tambah(String judul) async {
    final db = await database;
    return db.insert(_tableTodo, {"judul": judul, "selesai": 0});
  }

  static Future>> semua() async {
    final db = await database;
    return db.query(_tableTodo, orderBy: "dibuat DESC");
  }

  static Future selesaikan(int id) async {
    final db = await database;
    return db.update(_tableTodo, {"selesai": 1}, where: "id = ?", whereArgs: [id]);
  }

  static Future hapus(int id) async {
    final db = await database;
    return db.delete(_tableTodo, where: "id = ?", whereArgs: [id]);
  }
}

💡 Notice: Pattern ini merepresentasikan sqflite API. Selalu gunakan parameterized queries untuk mencegah SQL injection.

Assignment

Buat simulasi SQLite CRUD dengan insert, update, delete, dan query berdasarkan filter.

Expected output:

=== Database (3 rows) ===
{judul: Belajar Dart, selesai: 0, id: 1}
{judul: Buat Flutter app, selesai: 0, id: 2}
{judul: Push ke GitHub, selesai: 0, id: 3}
Setelah update & delete:
=== Database (2 rows) ===
{judul: Belajar Dart, selesai: 0, id: 1}
{judul: Buat Flutter app, selesai: 1, id: 2}
Belum selesai:
{judul: Belajar Dart, selesai: 0, id: 1}
Dart main.dart
Solution
Output