【问题标题】:SqfliteDatabaseException (DatabaseException(database_closed))SqfliteDatabaseException (DatabaseException(database_closed))
【发布时间】:2021-09-16 14:08:37
【问题描述】:

应用程序中的两个页面用数据库(sqlite)列出。但是当我想在页面之间切换时,出现这样的错误:SqfliteDatabaseException (DatabaseException(database_closed))

请帮帮忙。。我不明白为什么会看到这个错误。

import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'package:bankingapp/models/coin.dart';
import 'package:bankingapp/models/histories.dart';
import 'package:flutter/services.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

class DbHelper {
  static Database? _db;

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

  Future<Database> initDb() async {
    var dbFolder = await getDatabasesPath();
    String path = join(dbFolder, 'app.db');

    // Delete any existing database:
    await deleteDatabase(path);

    // Create the writable database file from the bundled demo database file:
    try {
      await Directory(dirname(path)).create(recursive: true);
    } catch (_) {}
    ByteData data =
        await rootBundle.load(join("assets/database", "bankingapp.db"));
    List<int> bytes =
        data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    await new File(path).writeAsBytes(bytes, flush: true);

    //open the database
    return await openDatabase(path);

    /*
    var dbFolder = await getDatabasesPath();
    String path = join(dbFolder, 'app.db');
    
    return await openDatabase(path);*/
  }

  Future<List<Histories>> getHistories() async {
    var dbClient = await db;
    var result = await dbClient.rawQuery("SELECT * FROM Histories");
    return result.map((data) => Histories.fromMap(data)).toList();
  }

  Future<List<Coins>> getCoins() async {
    var dbClient = await db;
    var result = await dbClient.rawQuery("SELECT * FROM Coins");
    return result.map((data) => Coins.fromMap(data)).toList();
  }
}

【问题讨论】:

    标签: ios flutter dart


    【解决方案1】:

    首先,从设备中卸载应用程序并运行flutter clean,然后构建一个新应用程序并再次运行它以查看是否出现错误。

    然后,检查您运行应用程序的设备是否限制了您的应用程序,看看您的设备是否需要任何特定权限。

    如果根据您提供的信息仍然出现,则问题似乎是数据库正在关闭或它未打开可能是由于多种原因,例如没有进行正确的初始化,甚至只是忘记输入await。检查您是否在其中打开数据库的数据库初始化代码,然后检查您是否在某处错误地关闭数据库,这应该仅在应用程序启动时完成终止。

    如果您已正确完成上述两个步骤,请检查您的数据库位置和映射。

    如果没有任何效果,请尝试关注官方sqflite docs and example,因为您的代码似乎与插件示例中显示的不同。

    【讨论】:

    • 希望对您有所帮助,如果是,请点赞并标记为正确,以便其他搜索相同错误的人更容易找到答案
    • 我检查了你所说的一切。我不在任何地方使用“关闭数据库”功能...
    • 我已根据您更新的问题编辑了我的答案。如果仍然存在,请检查一下,有任何问题请随时在 cmets 中提问。
    猜你喜欢
    • 2021-11-13
    • 2023-01-24
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2012-02-21
    • 2012-07-25
    相关资源
    最近更新 更多