【问题标题】:Load sqlite database into memory using dart?使用飞镖将sqlite数据库加载到内存中?
【发布时间】:2021-02-10 08:34:16
【问题描述】:

dart 中是否可以完全从内存中加载 sqlite 数据库?

我正在使用 sqflite 库:

https://pub.dev/packages/sqflite

当打开一个数据库时,它需要一个文件的路径:

var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'demo.db');

我只是从数据库中读取,从不写入。我想从文件中读取数据库,然后不再让sqlite打开文件。

有一个 inMemoryDatabasePath 属性: https://pub.dev/documentation/sqflite_common/latest/sqlite_api/inMemoryDatabasePath-constant.html

但这似乎只是为了在内存中创建一个新的空数据库。

那么,我的问题是是否可以完全打开一个sqlite数据库并将其加载到内存中?

如果没有,是否可以创建一个内存数据库,然后将所有数据复制到其中?类似这样:

How to copy a sqlite table from a disk database to a memory database in python?

(如果是这样,任何人都知道 dart / sqflite 中等效的 sql 命令是什么)?

【问题讨论】:

    标签: database sqlite flutter dart sqflite


    【解决方案1】:

    我从这篇文章中找到了解决方案: https://stackoverflow.com/posts/10506228/revisions

        sqfliteFfiInit();
        
        OpenDatabaseOptions options = OpenDatabaseOptions(readOnly: true);
        Databse _db = await databaseFactoryFfi.openDatabase(inMemoryDatabasePath);
        
        Database tmp = await databaseFactoryFfi.openDatabase(dbFile.path, options: options);
        
        await _db.rawQuery("ATTACH DATABASE ? as tmpDb", [dbFile.path]);
        await _db.rawQuery("CREATE TABLE TABLENAME AS SELECT * FROM tmpDb.TABLENAME");
        
        tmp.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      相关资源
      最近更新 更多