CodeBlanks Logo Icon CodeBlanks

Veritabanı

sqflite ile veri kalıcılığı eklersin.

sqflite ile veritabanı

sqflite, Dart ve Flutter için gömülü SQLite paketidir. import 'package:sqflite/sqflite.dart'; ile içe aktarılır. Database sınıfı bağlantıyı temsil eder; openDatabase ile açılır. db.query('tasks') bir tablodaki satırları listeler.

Örnek: final db = await openDatabase('tasks.db');. Tüm veritabanı işlemleri await ile beklenir; çünkü Future döner. db.insert ekler, db.update günceller, db.delete siler. Bu derste SqliteTaskService sınıfını yazacağız; bir Database alır ve all() yöntemiyle görevleri döndürür. Böylece aynı arabirime kalıcı depolama eklenir.

db.query ile satır okuma

db.query('tasks') bir Future<List<Map<String, Object?>>> döndürür. Her satır bir haritadır; sütun adları anahtardır. await ile sonuç beklenir.

Örnek: final rows = await db.query('tasks'); return rows.map((r) => Task(id: r['id'] as int, title: r['title'] as String)).toList();. Burada r['id'] ile satırdan değer okunur, as int ile türe çevrilir. map her satırı Task nesnesine dönüştürür. Bu desen, ilişkisel satırları nesnelere eşlemenin standart yoludur. İşlem async işaretli yöntem içinde yapılır; böylece await kullanılabilir.

Uygulama SqliteTaskService sınıfı

import 'package:sqflite/sqflite.dart'; satırını en üste ekle. class SqliteTaskService yaz; içinde final Database db alanı ve SqliteTaskService(this.db) kurucusu olsun. Future<List<Task>> all() async yöntemi ekle; içinde final rows = await db.query('tasks'); ve return rows.map((r) => Task(id: r['id'] as int, title: r['title'] as String)).toList(); yap. main içine print('Veritabanı: SqliteTaskService') ekle.

Başlangıç kodu

main.dart
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';

class Task {
  final int id;
  final String title;
  Task({required this.id, required this.title});
}

abstract class TaskService {
  List<Task> list();
}

class InMemoryTaskService implements TaskService {
  @override
  List<Task> list() => [Task(id: 1, title: 'görev 1')];
}

Response taskHandler(Request req, TaskService svc) {
  return Response.ok('görevler: ${svc.list().length}');
}

// sqflite paketini içe aktar
// SqliteTaskService sınıfını yaz (Database, query)

void main() {
  // Veritabanı bilgisini yazdır
}

Örnek çözüm

main.dart
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:sqflite/sqflite.dart';

class Task {
  final int id;
  final String title;
  Task({required this.id, required this.title});
}

abstract class TaskService {
  List<Task> list();
}

class InMemoryTaskService implements TaskService {
  @override
  List<Task> list() => [Task(id: 1, title: 'görev 1')];
}

Response taskHandler(Request req, TaskService svc) {
  return Response.ok('görevler: ${svc.list().length}');
}

class SqliteTaskService {
  final Database db;
  SqliteTaskService(this.db);

  Future<List<Task>> all() async {
    final rows = await db.query('tasks');
    return rows.map((r) => Task(id: r['id'] as int, title: r['title'] as String)).toList();
  }
}

void main() {
  print('Veritabanı: SqliteTaskService');
}

Beklenen çıktı

Veritabanı: SqliteTaskService

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 sqflite parçalarını eşleştir

Kavram Anlamı
sqflite Veritabanı
Database Bağlantı
query Sorgu
await Bekleme

2 db.query ne döndürür?

  • Satır listesi Doğru cevap
  • Bellek
  • HTTP yanıtı
  • Süre

Açıklama: db.query bir satır listesi (Future) döndürür.

3 db.query çağrısı

Soru
await ____.query('tasks');
Cevap
await db.query('tasks');

Açıklama: await db.query('tasks') ile satırlar okunur.

İleri seviye bölümündeki tüm dersler