繁体   English   中英

Flutter SQFLite 资产数据库

[英]Flutter SQFLite asset database

我有一个 MYSQL 转储数据库,我将其转换为 SQLite 并将其移动到 Flutter 的资产文件夹中。

我正在尝试打开数据库,但它抛出以下错误:

E/SQLiteLog(29199): (8) statement aborts at 1: [PRAGMA user_version = 1] attempt to write a readonly database I/flutter (29199): error DatabaseException(attempt to write a readonly database (code 8 SQLITE_READONLY)) sql 'PRAGMA user_version = 1' args []} during open, closing...

这是代码:

_initDatabase() async {

    var databasePath = await getDatabasesPath();
    var path = join(databasePath, "example.db");

    var exists = await databaseExists(path);

    if (!exists) {
         print('creating a new copy from asset!');

     try {
         await Directory(dirname(path)).create(recursive: true);
     } catch (_) {}

     ByteData data = await rootBundle.load(join("assets", "example.db"));
     List<int> bytes =
      data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);

      await File(path).writeAsBytes(bytes, flush: true);
   } else {
      print('opening existing database');
}

return await openDatabase(path, version: _dbVersion, readOnly: true);

}

它不会在上述方法中引发错误,但是当我尝试查询时(例如一个简单的 SELECT)。

我搜索了类似的问题,但无济于事。 有些人说这是一个许可问题,有些人说不同。

谁能告诉我我做错了什么?

openDatabase期间指定版本是为了执行数据库模式迁移,因此不适用于只读模式。 只需删除version参数,你应该没问题:

await openDatabase(path, readOnly: true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM