gpt4 book ai didi

database - Flutter sqflite 打开已有数据库

转载 作者:IT王子 更新时间:2023-10-29 06:37:14 26 4
gpt4 key购买 nike

如何使用 flutter 和 sqflite 从 Assets 中打开现有数据库?我阅读了本指南: https://github.com/tekartik/sqflite/blob/master/doc/opening_db.md#preloading-data

但我的应用程序显示“未找到表”错误谢谢。

最佳答案

Opening an asset database指南解释了在 Flutter 应用程序中捆绑和打开预先存在的 SQLite 数据库必须执行的步骤:。

首先,您必须编辑您的 pubspec.yaml 配置以引用您预先存在的 SQLite 数据库文件,以便在构建应用程序时将其捆绑到您的应用程序中。在下面的示例中,我们假设该文件存在于您的 Flutter 应用程序目录下的 assets/demo.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/demo.db

接下来,在您的应用程序初始化中,您需要将捆绑文件数据复制到可用位置,因为捆绑资源本身无法在 Android 上作为文件直接打开。

sqflite.getDatabasesPath()函数将返回用于此的目录。这通常类似于 Android 上的 /data/data/org.example.myapp/databases/。有了这个,您就可以从捆绑 Assets 中加载字节数据并创建应用程序的可写数据库文件,此处命名为 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/demo.db");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(dbPath).writeAsBytes(bytes);

最后,您可以在应用程序启动时打开创建的数据库文件:

var db = await openDatabase(dbPath);

关于database - Flutter sqflite 打开已有数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53126885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com