database_helper.dart 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import 'package:sqflite/sqflite.dart';
  2. import 'package:path/path.dart';
  3. import '../models/palm_record.dart';
  4. class DatabaseHelper {
  5. static final DatabaseHelper _instance = DatabaseHelper._internal();
  6. factory DatabaseHelper() => _instance;
  7. DatabaseHelper._internal();
  8. static Database? _database;
  9. Future<Database> get database async {
  10. if (_database != null) return _database!;
  11. _database = await _initDatabase();
  12. return _database!;
  13. }
  14. Future<Database> _initDatabase() async {
  15. String path = join(await getDatabasesPath(), 'palm_oil_history.db');
  16. return await openDatabase(
  17. path,
  18. version: 2,
  19. onCreate: _onCreate,
  20. onUpgrade: _onUpgrade,
  21. );
  22. }
  23. Future<void> _onCreate(Database db, int version) async {
  24. await db.execute('''
  25. CREATE TABLE history (
  26. id INTEGER PRIMARY KEY AUTOINCREMENT,
  27. image_path TEXT,
  28. ripeness_class TEXT,
  29. confidence REAL,
  30. timestamp TEXT,
  31. x1 REAL,
  32. y1 REAL,
  33. x2 REAL,
  34. y2 REAL,
  35. detections TEXT
  36. )
  37. ''');
  38. }
  39. Future<void> _onUpgrade(Database db, int oldVersion, int newVersion) async {
  40. if (oldVersion < 2) {
  41. await db.execute('ALTER TABLE history ADD COLUMN detections TEXT');
  42. }
  43. }
  44. Future<int> insertRecord(PalmRecord record) async {
  45. Database db = await database;
  46. return await db.insert('history', record.toMap());
  47. }
  48. Future<List<PalmRecord>> getAllRecords() async {
  49. Database db = await database;
  50. List<Map<String, dynamic>> maps = await db.query('history', orderBy: 'timestamp DESC');
  51. return List.generate(maps.length, (i) {
  52. return PalmRecord.fromMap(maps[i]);
  53. });
  54. }
  55. Future<int> deleteRecord(int id) async {
  56. Database db = await database;
  57. return await db.delete('history', where: 'id = ?', whereArgs: [id]);
  58. }
  59. Future<int> clearAllRecords() async {
  60. Database db = await database;
  61. return await db.delete('history');
  62. }
  63. }