Flutter SQLite 连接问题(适用于 Android)

问题描述 投票:0回答:1

为 Android 开发应用程序。(flutter 上的新功能)尝试连接到现有的 SQLite 文件来进行项目。 我的连接有问题,它没有连接到文件,而是在 android 目录中初始化一个具有相同名称的空新文件(Android/data/com.exemple.android_studio_project)。在enternet中我只看到了惰性初始化变体。有一些方法可以定位文件,但由于某种原因它们不起作用。

我尝试询问 AI,但答案并不能令我满意。

**真实的数据库位置是: D: ndroid_studio_project\lib\souece.db **

部分代码 sqLite_connect.dart:

import 'dart:typed_data';

import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart'; 
import 'dart:io'; 

class SqliteConnect {
  static final SqliteConnect instance = SqliteConnect._init();

  SqliteConnect._init();

  Database? _database;

  Future<Database> get database async {
    if (_database != null) return _database!;


    _database = await _initDB('source.db');
    return _database!;
  }

  Future<Database> _initDB(String filePath) async {
    
    Directory documentsDirectory = await getApplicationDocumentsDirectory();

   
    String path = join(documentsDirectory.path, filePath);

   
    bool dbExists = await _checkDbExists(path);

   
    if (!dbExists) {
      await _copyDbFromAssets(path);
    }

   
    return await openDatabase(path);
  }

  
  Future<bool> _checkDbExists(String path) async {
    try {
      return await File(path).exists();
    } catch (e) {
      return false;
    }
  }


  Future<void> _copyDbFromAssets(String path) async {

    ByteData data = await rootBundle.load('android_studio_project/assets/source.db');


    List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);

    
    await File(path).writeAsBytes(bytes, flush: true);
  }






}

我希望从应用程序中的文件中获取数据

如果我不知道在 Flutter 应用程序上的 sqlite 中存储数据的技术,我将很乐意接受建议。

android flutter sqlite connection
1个回答
0
投票

与应用程序捆绑的数据库文件不能位于

lib
文件夹中。它需要是一个 Flutter 资源,本文档描述了将文件作为资源存储在哪里,以及如何让 Flutter 知道它在那里。代码中的函数
_copyDbFromAssets
将捆绑的资源复制到应用程序的文档目录,在那里它可以被 sqlite 访问。

© www.soinside.com 2019 - 2024. All rights reserved.