是否可以将Room Persistence用于其他类型的数据库?

时间:2018-11-18 23:13:54

标签: android sqlite geospatial android-room android-architecture

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

Android Spatialite

谢谢!

2 个答案:

答案 0 :(得分:3)

是的,如果您愿意为其编写桥代码。

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

这又将要求您在其他类上实现其他接口,例如SupportSQLiteDatabase。基本上,这是一个包装器,具有类似于框架API的API。您可以将这些调用转换为要使用的SQLite实现。

我以the SafeRoom library的形式针对Android的SQLCipher进行了此操作。目前,由于Android版SQLCipher的某些限制(希望很快会取消),我的实现有些笨拙。您将为特定的SQLite实现创建相同种类的类。然后,将您的SupportSQLiteHelper.Factory插入您的RoomDatabase.Builder,现在Room将与您的数据库实现对话。

请注意,您实际上无法扩展Room本身。例如,您不能发明知道地理空间内容的新Room注解。如果该SQL违反了Room的预期(例如,新关键字),那么Room编译器可能会对您的地理空间SQL产生问题。看来他们添加的只是“很多”功能,所以希望Room可以正常运行。

答案 1 :(得分:0)

您可以将我当前的spacespaceite实现用于Android会议室:

https://github.com/anboralabs/spatia-room