【发布时间】:2020-06-12 04:56:03
【问题描述】:
我是 Flutter 开发的新手。
我想在我的 Flutter 应用程序中使用现有的数据库。
这怎么可能?
【问题讨论】:
我是 Flutter 开发的新手。
我想在我的 Flutter 应用程序中使用现有的数据库。
这怎么可能?
【问题讨论】:
在你的 Flutter 应用中有一个关于 How to open as an existing database as an asset 的很棒的指南。
和this answer 我发现对你的场景很有用。
您可以访问上述链接或查看下面的分步过程,以在您的 Flutter 应用中使用现有数据库。
Opening an asset database 指南解释了在 Flutter 应用中捆绑和打开预先存在的 SQLite 数据库所必须执行的步骤。
首先,您必须编辑您的 pubspec.yaml 配置以引用您预先存在的 SQLite 数据库文件,以便在构建应用程序时将其捆绑到您的应用程序中。在以下示例中,我们将假设该文件存在于您的 Flutter 应用目录下的 assets/example.db:
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
assets:
- assets/example.db
接下来,在您的应用初始化中,您需要将捆绑的文件数据复制到可用的位置,因为捆绑的资源本身无法在 Android 上直接作为文件打开。
sqflite.getDatabasesPath() 函数将返回用于此目的的目录。这通常类似于 Android 上的 /data/data/org.example.myapp/databases/。有了这个,您可以从捆绑的资产中加载字节数据并创建应用程序的可写数据库文件,这里命名为app.db:
// Construct the path to the app's writable database file:
var dbDir = await getDatabasesPath();
var dbPath = join(dbDir, "app.db");
// Delete any existing database:
await deleteDatabase(dbPath);
// Create the writable database file from the bundled demo database file:
ByteData data = await rootBundle.load("assets/example.db");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(dbPath).writeAsBytes(bytes);
最后,您可以在应用启动时打开创建的数据库文件:
var db = await openDatabase(dbPath);
【讨论】: