我可以使用 SqlDelight 创建一个内存数据库以在 Android 中运行吗?

Posted

技术标签:

【中文标题】我可以使用 SqlDelight 创建一个内存数据库以在 Android 中运行吗?【英文标题】:Can I create an in-memory database with SqlDelight for running in Android? 【发布时间】:2021-08-15 11:54:48 【问题描述】:

我有一个运行良好的 SqlDelight 数据库。我是这样创建的:

Database(androidSqliteDriver(Database.Schema, context, DatabaseName)

对于单元测试,我创建了一个这样的内存数据库:

Database(JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY).apply  
        Database.Schema.create(this) 
)

我想对在模拟器或物理设备上运行的 androidTests 做同样的事情,但是 JdbcSqliteDriver 在 Android 中不起作用,大概是因为 Android 没有默认安装该软件包。

如何在 AndroidTest(或生产环境)中运行内存数据库?

【问题讨论】:

【参考方案1】:

事实证明,如果您不命名数据库,它会创建一个内存版本:

Database(AndroidSqliteDriver(Database.Schema, context, null)

因为AndroidSqliteDriver 使用SupportSQLiteOpenHelper.Builder,在文档中有这个:

    /**
     * @param name Name of the database file, or null for an in-memory database.
     * @return This
     */
    @NonNull
    public Builder name(@Nullable String name) 
        mName = name;
        return this;
    

【讨论】:

以上是关于我可以使用 SqlDelight 创建一个内存数据库以在 Android 中运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在同一个项目中将 sqldelight 与不同的数据库一起使用吗?

如何使用 sqldelight 读取位于资产中的 db 文件 - Android

使用 Sqldelight 更新对象数据

是否可以使用 sqldelight 从本地资源加载预填充的数据库

SqlDelight/SQLite 没有正确执行连接?

Sqldelight 1.4 如何在没有主键(id)的情况下插入填充数据生成对象