Реализация SQLite в Android — это немного головной боли и несколько запутанных классов-хелперов для работы с базой. Это все, что я помню об этом, потому что давно уже отказался от использования дефолтных инструментов в пользу библиотек, позволяющих работать с базой как с объектами. Концепция ORM мне всегда была близка, поэтому я в свое время довольно безболезненно перешел на нее.

ORMLite стал моим выбором для работы с ORM в Android (с того момента прошло несколько лет, там были какие-то альтернативы, но по ORMLite было больше информации, документации и примеров). Я написал небольшой набор классов, помогающих мне в работе с этой библиотекой и, как говорится, позабыл об этой проблеме. Его вы можете найти на GitHub.

У ORMLite я выявил пару проблем, которые вынесли мне мозг в последнем проекте. Первая проблема — впрочем, это даже не проблема, а просто следование докам — это большие описание классов. Каждый атрибут должен иметь аннотация @DatabaseField, плюс я еще указываю название поля. Это вопрос спорный, кто-то делает так же, кто-то нет. Вторая проблема — это путаница с relations. Опять же в этом проекте я в итоге плюнул на eager loading, и стал получать объект через метод findChallenge (если писать обычные getter, то ORMLite будет считать, что вы пытаетесь получить данные из базы, даже если у поля есть аннотация ignore).

https://github.com/sashatinkoff/ORMLite-Example