首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FLUTTER,SQFLITE,如果相关数据仍然存在,如何防止删除?

FLUTTER,SQFLITE,如果相关数据仍然存在,如何防止删除?
EN

Stack Overflow用户
提问于 2021-10-04 02:52:43
回答 1查看 48关注 0票数 0

嗨,伙计们,我是Flutter的新手,现在有实习生。

所以我在这里有3个表,它们是项目数据库是主要的,组数据库,类别数据库。

如果项目数据库正在使用该组,我应该如何防止用户删除组数据库,因为该组已在项目数据库中使用?

如果有人能指导我,那就太好了,因为我对此完全陌生,而且因为实习生的关系,我必须尽快完成它。

代码语言:javascript
复制
 import 'dart:async';
import 'dart:io' as io;
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'package:ezystock/model/item_model.dart';
import 'package:ezystock/model/group_model.dart';
import 'package:ezystock/model/category_model.dart';

class DBHelper {
  static Database _db;
  static const String DB_NAME = 'database.db';

  Future<Database> get db async {
    if (_db != null) {
      return _db;
    }
    _db = await initDb();
    return _db;
  }

  initDb() async {
    io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, DB_NAME);
    var db = await openDatabase(path, version: 1, onCreate: _onCreate);
    return db;
  }

  _onCreate(Database db, int version) async {
    await db.execute("CREATE TABLE 'item' ('id' INTEGER PRIMARY KEY, 'code' TEXT, 'description' TEXT,'cost' REAL,'price' REAL,'category' TEXT,'group' TEXT)");
    await db.execute("CREATE TABLE 'group' ('id' INTEGER PRIMARY KEY, 'code' TEXT, 'description' TEXT)");
    await db.execute("CREATE TABLE 'category' ('id' INTEGER PRIMARY KEY, 'code' TEXT, 'description' TEXT)");
  }

//Category
  Future<Category> saveCategory(Category category) async {
    var dbClient = await db;
    category.id = await dbClient.insert("category", category.toMap());
    return category;
  }

  Future<List<Category>> getCategory() async {
    var dbClient = await db;
    List<Map> maps = await dbClient.query("category", columns: ["id", "code","description"]);
    //List<Map> maps = await dbClient.rawQuery("SELECT * FROM $TABLE");
    List<Category> category = [];
    if (maps.length > 0) {
      for (int i = 0; i < maps.length; i++) {
        category.add(Category.fromMap(maps[i]));
      }
    }
    return category;
  }

  Future<int> deleteCategory(int id) async {
    var dbClient = await db;
    return await dbClient.delete("category", where: 'id = ?', whereArgs: [id]);
  }

  Future<int> updateCategory(Category category) async {
    var dbClient = await db;
    return await dbClient.update("category", category.toMap(),
        where: 'id = ?', whereArgs: [category.id]);
  }


  //Group
  Future<Group> saveGroups(Group group) async {
    var dbClient = await db;
    group.id = await dbClient.insert("group", group.toMap());
    return group;
  }

  Future<List<Group>> getGroups() async {
    var dbClient = await db;
    List<Map> maps = await dbClient.query("group", columns: ["id", "code","description"]);
    //List<Map> maps = await dbClient.rawQuery("SELECT * FROM $TABLE");
    List<Group> groups = [];
    if (maps.length > 0) {
      for (int i = 0; i < maps.length; i++) {
        groups.add(Group.fromMap(maps[i]));
      }
    }
    return groups;
  }

  Future<int> deleteGroups(int id) async {
    var dbClient = await db;
    List<Map> items = await dbClient.query("item", where: 'group = ?', whereArgs: [id]);
    if (items.length > 0) {
      return await dbClient.delete("group", where: 'id = ?', whereArgs: [id]);
    } else {

    }
  }

  Future<int> updateGroups(Group group) async {
    var dbClient = await db;
    return await dbClient.update("group", group.toMap(),
        where: 'id = ?', whereArgs: [group.id]);
  }




  //items
  Future<Items> saveItems(Items items) async {
    var dbClient = await db;
    items.id = await dbClient.insert("item", items.toMap());
    return items;
  }

  Future<List<Items>> getItems() async {
    var dbClient = await db;
    List<Map> maps = await dbClient.query("item", columns: ["id", "code","description","cost","price","category","group"]);
    //List<Map> maps = await dbClient.rawQuery("SELECT * FROM $TABLE");
    List<Items> groups = [];
    if (maps.length > 0) {
      for (int i = 0; i < maps.length; i++) {
        groups.add(Items.fromMap(maps[i]));
      }
    }
    return groups;
  }

  Future<int> deleteItems(int id) async {
    var dbClient = await db;
    return await dbClient.delete("item", where: 'id = ?', whereArgs: [id]);
  }

  Future<int> updateItems(Items items) async {
    var dbClient = await db;
    return await dbClient.update("item", items.toMap(),
        where: 'id = ?', whereArgs: [items.id]);
  }

  Future close() async {
    var dbClient = await db;
    dbClient.close();
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-04 05:11:29

答案是:不提供任何方法来删除group表。所以删除下面的代码:

代码语言:javascript
复制
  Future<int> deleteGroups(int id) async {
    var dbClient = await db;
    List<Map> items = await dbClient.query("item", where: 'group = ?', whereArgs: [id]);
    if (items.length > 0) {
      return await dbClient.delete("group", where: 'id = ?', whereArgs: [id]);
    } else {

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69430451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档