为 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 中存储数据的技术,我将很乐意接受建议。
与应用程序捆绑的数据库文件不能位于
lib
文件夹中。它需要是一个 Flutter 资源,本文档描述了将文件作为资源存储在哪里,以及如何让 Flutter 知道它在那里。代码中的函数 _copyDbFromAssets
将捆绑的资源复制到应用程序的文档目录,在那里它可以被 sqlite 访问。