db_helper.dart

ทำฐานข้อมูล SQLite

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

class DBHelper {
  static Database? _database;

  static Future<Database> get database async {
    if (_database != null) return _database!;
    _database = await _initDB("pets_history.db");
    return _database!;
  }

  static Future<Database> _initDB(String filePath) async {
    final dbPath = await getDatabasesPath();
    final path = join(dbPath, filePath);

    return await openDatabase(
      path,
      version: 1,
      onCreate: _createDB,
    );
  }

  static Future _createDB(Database db, int version) async {
    await db.execute('''
      CREATE TABLE pets_history (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        datetime TEXT,
        originalImage TEXT,
        boxedImage TEXT,
        breeds TEXT,
        ages TEXT,
        breedDetails TEXT,
        ageTips TEXT,
        boxes TEXT
      )
    ''');
  }
  /// Insert history
  static Future<int> insertHistory(Map<String, dynamic> data) async {
    final db = await database;
    return await db.insert('pets_history', data);
  }

  /// Get all history (เรียงตาม datetime ล่าสุด)
  static Future<List<Map<String, dynamic>>> getAllHistory() async {
    final db = await database;
    return await db.query('pets_history', orderBy: "datetime DESC");
  }

  /// Delete history by id
  static Future<int> deleteHistory(int id) async {
    final db = await database;
    return await db.delete('pets_history', where: 'id = ?', whereArgs: [id]);
  }

  /// Clear all history
  static Future<int> clearHistory() async {
    final db = await database;
    return await db.delete('pets_history');
  }
}

1. โครงสร้างคลาส DBHelper

  • คลาสนี้ช่วยจัดการ SQLite Database สำหรับบันทึกประวัติการตรวจจับสัตว์

  • _database → ตัวเก็บ connection database (singleton)


2. Getter database

  • ใช้เรียก database

  • ถ้า database ถูกสร้างแล้ว → return ตัวเดิม

  • ถ้าไม่ → เรียก _initDB เพื่อสร้าง database


3. สร้าง/เปิด Database

  • getDatabasesPath() → path ที่เก็บ database บนเครื่อง

  • openDatabase → เปิดหรือสร้าง database

  • version:1 → เวอร์ชัน database

  • onCreate: _createDB → ถ้า database ยังไม่มี จะเรียก _createDB


4. สร้างตาราง

  • สร้างตาราง pets_history สำหรับเก็บประวัติ

  • ฟิลด์สำคัญ:

    • id → primary key อัตโนมัติ

    • datetime → วันที่และเวลา

    • originalImage → path รูปต้นฉบับ

    • boxedImage → path รูปที่มี bounding box

    • breeds → ชื่อสายพันธุ์

    • ages → อายุที่ทำนาย

    • breedDetails → ข้อมูลสายพันธุ์

    • ageTips → ข้อมูลการดูแล

    • boxes → ข้อมูล bounding box


5. Insert History

  • เพิ่ม record ใหม่เข้า pets_history

  • data → Map<String,dynamic> ของข้อมูล


6. Get All History

  • ดึงข้อมูลทั้งหมดจากตาราง pets_history

  • เรียงจากล่าสุดไปเก่าสุด


7. Delete History by id

  • ลบ record ที่มี id ตรงกับค่า argument


8. Clear All History

  • ลบ record ทั้งหมดใน pets_history


สรุปง่าย ๆ

  1. คลาส DBHelper เป็นตัวกลางจัดการ SQLite Database

  2. สร้าง/เปิด database และตาราง pets_history

  3. ฟังก์ชันหลัก:

    • insertHistory() → เพิ่มประวัติ

    • getAllHistory() → ดึงประวัติทั้งหมด

    • deleteHistory(id) → ลบตาม id

    • clearHistory() → ลบทั้งหมด

  4. ใช้เก็บข้อมูลรูปภาพ, bounding box, ชื่อสายพันธุ์, อายุ และข้อมูลสายพันธุ์

Last updated