Veritabanı
- Dart kursu
- İleri seviye
- Ders 81/83
- 6 dk
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
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
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ı
await ____.query('tasks');
await db.query('tasks');
Açıklama: await db.query('tasks') ile satırlar okunur.