gpt4 book ai didi

android - 我可以将 Room Persistence 用于不同类型的数据库吗?

转载 作者:搜寻专家 更新时间:2023-11-01 08:19:22 26 4
gpt4 key购买 nike

我知道 room 是 SQLite 之上的一个抽象层,我只是想知道我是否可以将它用于不同类型的数据库。我想将 Room 用于具有地理空间支持的特殊版本的 SQLite,这可能吗?我真的找不到关于这个的答案。

Android Spatialite

提前致谢!

最佳答案

是的,如果你愿意为它编写桥代码。

您可以在 RoomDatabase.Builder 上调用的方法之一 is openHelperFactory() .这需要一个 SupportSQLiteOpenHelper.Factory 的实例,这就是 Room 用来与底层数据库实现交互的实例。默认情况下,Room 使用 FrameworkSQLiteOpenHelper.Factory,但您可以通过 openHelperFactory() 提供自己的。

反过来,这将要求您在其他类上实现其他接口(interface),例如 SupportSQLiteDatabase。这基本上是一个包装器,其 API 有点类似于框架 API。您将这些调用转换为您希望使用的 SQLite 实现。

我为 Android 的 SQLCipher 做了这个,形式为 the SafeRoom library .现在,我的实现有点笨拙,因为适用于 Android 的 SQLCipher 存在一些限制,希望很快就会解除。您将为特定的 SQLite 实现创建相同类型的类。然后,将您的 SupportSQLiteHelper.Factory 插入您的 RoomDatabase.Builder,现在 Room 将与您的数据库实现对话。

请注意,您实际上无法扩展 Room 本身。例如,您无法发明了解地理空间信息的新 Room 注释。如果您的地理空间 SQL 破坏了 Room 的预期(例如,新关键字),Room 编译器可能会出现问题。看起来他们添加的“只是”很多功能,所以希望 Room 表现良好。

关于android - 我可以将 Room Persistence 用于不同类型的数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53366380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com