首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Flutter SQFLite资源数据库

Flutter SQFLite资源数据库
EN

Stack Overflow用户
提问于 2020-08-14 21:12:29
回答 1查看 677关注 0票数 1

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

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

代码语言:javascript
复制
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...

代码如下:

代码语言:javascript
复制
_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 )时。

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

有人能告诉我我哪里做错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-14 22:56:05

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

代码语言:javascript
复制
await openDatabase(path, readOnly: true);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63413472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档