Могу ли я использовать постоянство комнаты для другого типа базы данных? - PullRequest
0 голосов
/ 19 ноября 2018

Я знаю, что комната - это слой абстракции над SQLite, я просто хочу знать, могу ли я использовать его для другого типа базы данных. Я хочу использовать Room для специальной версии SQLite с геопространственной поддержкой, это возможно? Я действительно не могу найти ответ по этому поводу.

Android Spatialite

Заранее спасибо!

1 Ответ

0 голосов
/ 19 ноября 2018

Да, если вы хотите написать для него код моста.

Один из методов, который вы можете вызвать на RoomDatabase.Builder , это openHelperFactory(). Это берет экземпляр SupportSQLiteOpenHelper.Factory, и это то, что Room использует для взаимодействия с базовой реализацией базы данных. По умолчанию Room использует FrameworkSQLiteOpenHelper.Factory, но через openHelperFactory() вы можете указать свой собственный.

Это, в свою очередь, потребует от вас реализации других интерфейсов для других классов, таких как SupportSQLiteDatabase. По сути, это оболочка с API, который чем-то напоминает API фреймворка. Вы переводите эти вызовы в реализацию SQLite, которую хотите использовать.

Я сделал это для SQLCipher для Android в виде библиотеки SafeRoom . Прямо сейчас моя реализация немного неуклюжа, из-за некоторых ограничений в SQLCipher для Android, которые, надеюсь, скоро будут сняты Вы бы создали такой же класс для вашей конкретной реализации SQLite. Затем подключите SupportSQLiteHelper.Factory к RoomDatabase.Builder, и теперь Room поговорит с вашей базой данных.

Обратите внимание, что вы не можете расширить саму комнату. Например, вы не можете изобретать новые аннотации Room, которые знают о геопространственных вещах. И у компилятора Room могут возникнуть проблемы с вашим геопространственным SQL, если этот SQL нарушает то, что ожидает Room (например, новые ключевые слова). Кажется, что они добавили «просто» много функций, так что надеюсь, что Room будет вести себя хорошо.

...