当前位置: 首页 > 知识库问答 >
问题:

Flutter SQFLite资产数据库

喻子航
2023-03-14

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

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

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)。

我已经搜索过类似的问题,但没有结果。有些人说这是一个许可问题,有些人说的不一样。

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

共有1个答案

东门晨
2023-03-14

opendatabase期间指定版本是为了执行数据库架构迁移,因此不是为了只读模式。只需删除version参数,您就会没事:

await openDatabase(path, readOnly: true);
 类似资料:
  • 问题内容: 我尝试从资产目录复制SQLite数据库,以便以后访问。但是我做不到! DatabaseHelper很简单: 尝试了一切!我尝试玩扩展!但是我仍然收到一个错误:复制数据库时出错: 我检查了模拟器,我的文件在那里,所以我应该可以写它!请任何帮助!真让我发疯! UPD 我试图将其放在SD卡上,并且可以正常工作。但仍然无法理解为什么我无法将其写入应用程序数据文件夹。 问题答案: 我使用此助手,

  • 问题内容: 从相对不规范的形式获取数据库并将其规范化时,人们可能期望资源利用率 发生 什么 变化 (如果有)? 例如,规范化通常意味着可以从更少的表中创建更多的表,这意味着数据库现在具有更多的表,但是其中许多表都非常小,可以使经常使用的表更好地适合内存。 表的数量越多,意味着(潜在地)需要更多的联接才能获取抽象出的数据,因此,人们可能会期望系统需要执行的联接数量越多,就会产生某种影响。 那么,标准

  • 我知道我将文本文件放在了assets\chat1的位置。txt,我的代码也可以与其他txt一起使用,但不知何故,我总是遇到以下错误: 发生异常。 错误(无法加载资产:assets/chat1.txt) 我的代码: pubspec.yaml

  • 问题内容: 我想在应用程序的第一次运行中将一个很大的目录从我的应用程序的Assets文件夹复制到data文件夹。我怎么做?我已经尝试过一些示例,但是没有用,所以我什么都没有。我的目标是Android 4.2。 谢谢,Yannik 问题答案: 尝试使用您的Application实例的以下代码(您应该在清单中编写该类):该代码将资产/文件文件夹的内容复制到应用程序的缓存文件夹中(您可以将其他路径放在c

  • 定义 SHOW RESOURCES [FROM schemaName] 说明 列 说明 name 数据源名称 type 数据源类型 host 数据源地址 port 数据源端口 db 数据库名称 attribute 数据源参数 示例 mysql> show resources; +------+-------+-----------+------+------+----------------

  • 定义 ADD RESOURCE dataSource [, dataSource] ... ALTER RESOURCE dataSource [, dataSource] ... dataSource: simpleSource | urlSource simpleSource: dataSourceName(HOST=hostName,PORT=port,DB=dbNam

  • 我的代码在Android2.3上运行良好,但我不知道为什么在Android4.2上不运行 我的异常日志在这里 我的mainactivity.java 我的DatabaseHelper.java