ORM для Android SQLite и схемы базы данных
Я ищу очень простую структуру ORM, работающую на Android для SQLite. Я тестировал ActiveAndroid, но ни один из примеров не мог построить на Eclipse.
Кстати, как ребята внедряют отношения "многие ко многим" в SQLite для Android? Как вы отражаете каскад относительно удаления строк и гарантируете целостность базы данных?
Ответы
Ответ 1
Я являюсь основным автором ORMLite, у которого есть бэкэнд Android, который вызывает звонки в собственные API баз данных ОС Android для поддержки своего ORM функциональность. У нас есть большое количество разработчиков Android, которые успешно используют фреймворк. См. Здесь дополнительную информацию:
http://ormlite.com/sqlite_java_android_orm.shtml
В терминах отношений "многие ко многим" ORMLite не поддерживает каскадные или любые более продвинутые функции ORM, но есть примеры простых реализаций "много-ко-многим":
http://ormlite.com/docs/examples
Ответ 2
Я написал легкий ORM и назвал его Androrm. Поскольку я люблю Django, синтаксис запроса выглядит очень похожим. Пожалуйста, попробуйте и дайте мне отзыв:)
Веб-страница: http://androrm.com/
Также на GitHub: https://github.com/androrm/androrm
Ответ 3
Для тех, кто еще ищет решение ORM, несколько месяцев назад я выпустил greenDAO. Несколько приложений в Android Market уже используют его. В отличие от других инструментов ORM для Android, одной из целей первичного проектирования greenDAOs была производительность. Для многих операций он должен быть в несколько раз быстрее, чем другие решения, например. он в 4-5 раз быстрее по сравнению с ORMLite для загрузки объектов.
Он поддерживает отношения. В документации описывается как использовать отношения и как вы можете моделировать отношения "многие-ко-многим" .
Удалить-каскад является опасной вещью и, следовательно, не поддерживается greenDAO. Более безопасный способ - удалить сущности снизу вверх внутри транзакции.
Ответ 4
Ниже я расскажу, как я это делаю с SORMA - решением для Android Content Provider.
-
Сопоставьте таблицу Java POJO с базой данных:
@Table(
name="contact",
keyColumn="id",
autoId=true,
create="create table if not exists contact ("
+ " id INTEGER primary key autoincrement"
+ ", firstName text"
+ ", lastName text"
+ ", married tinyint"
+ ")"
)
public class Contact {
private Integer id;
private String firstName;
private String lastName;
private boolean married;
......
-
Создайте класс поставщика контента:
import com.gaoshin.sorma.annotation.ContentProvider;
import com.gaoshin.sorma.annotation.SormaContentProvider;
@ContentProvider(
version = 1,
mappingClasses = {
Contact.class,
Phone.class
}
)
public class AddressBookContentProvider extends SormaContentProvider {
}
-
Определите поставщика контента в AndroidManifest.xml:
<provider
android:authorities="com.gaoshin.sorma.examples.addressbook.AddressBookContentProvider"
android:name="com.gaoshin.sorma.examples.addressbook.AddressBookContentProvider" />
-
Используйте поставщика контента:
sorma = SORMA.getInstance(getBaseContext(), AddressBookContentProvider.class);
// insert contact
Contact contact = new Contact();
contact.setFirstName("fname1");
contact.setLastName("lname1");
sorma.insert(contact);
Готово!
(Вы можете найти более подробную информацию здесь.)
Ответ 5
Я использую и являюсь автором, Mechanoid DB, который предоставляет sqlite, например dsl, для создания поддерживаемых контент-провайдеров sqlite.
Проверьте это:
http://www.robotoworks.com/mechanoid-plugin/mechanoid-db/
Ответ 6
Попробуйте SQLiteGen. Это не так богато, как спящий режим, но вы можете сгенерировать в Eclipse несколько простых классов ORM.
Надеюсь, что это поможет!