You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter本地数据库连接异常求助:assets数据库拷贝失败

Flutter本地数据库拷贝失败问题排查与修复

核心问题与修复点

  • 拼写错误导致文件写入失败:代码中Fail(path)是笔误,正确应为File(path),这是导致拷贝失败的直接原因。
  • 异常处理缺失:原代码仅捕获目录创建异常,拷贝、打开数据库过程的异常未处理,不利于定位问题。
  • 路径匹配验证:需确保db_name常量值为information.db,否则会出现路径不匹配。

修正后的完整代码

import 'dart:io';
import 'dart:typed_data';
import 'package:first_app/const/const.dart'; 
import 'package:flutter/services.dart';
import 'package:path/path.dart'; 
import 'package:sqflite/sqflite.dart'; 

class DatabaseHelper{
  Future<Database> copyDB() async{  
    var dbPath = await getDatabasesPath();
    var path = join(dbPath, db_name);

    var exists = await databaseExists(path);

    if(!exists){
      try{
        await Directory(dirname(path)).create(recursive: true);
        // 从assets拷贝数据库文件
        ByteData data = await rootBundle.load(join('assets/DB', db_name));
        List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
        await File(path).writeAsBytes(bytes, flush: true);
        print('数据库已成功拷贝到本地');
      } catch(e){
        print('拷贝数据库时出错: $e');
        rethrow;
      }
    } else {
      print('数据库已存在');
    }
    try {
      return await openDatabase(path, readOnly: true);
    } catch(e) {
      print('打开数据库失败: $e');
      rethrow;
    }
  }
}

额外检查项

  • 确认pubspec.yaml的assets配置缩进正确(与uses-material-design同级):
flutter:
  uses-material-design: true
  assets:
    - assets/DB/information.db
  • 确保assets/DB目录下的information.db文件名大小写与代码中db_name完全一致(iOS/macOS等系统区分大小写)。

内容的提问来源于stack exchange,提问作者user23985254

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:32:42