web-dev-qa-db-ja.com

Android SQLiteとデータベーススキーマのORM

SQLite用のAndroid)で動作する非常に単純なORMフレームワークを探しています。テストしてきました ActiveAndroid ですが、Eclipseでビルドできる例はありません。
ちなみに、Android用SQLiteで「多対多」の関係を実装するにはどうすればよいですか?行の削除に関するカスケードをどのように反映し、データベースの整合性を保証しますか?

25
BlackLabrador

私は ORMLite の主な作者であり、ネイティブAndroid OSデータベースAPIを呼び出してサポートするAndroidバックエンドORM機能。フレームワークを正常に使用しているAndroid開発者が多数います。詳細については、こちらを参照してください。

http://ormlite.com/sqlite_Java_Android_orm.shtml

多対多の関係に関して、ORMLiteはカスケードまたはより高度なORM機能のいずれもサポートしていませんが、簡単な多対多の実装の例があります。

http://ormlite.com/docs/examples

まだORMソリューションを探している人のために、私は数ヶ月前に greenDAO をリリースしました。 Android市場のいくつかのアプリはすでにそれを使用しています。他のAndroid ORMツールとは異なり、greenDAOの主要な設計目標の1つはパフォーマンスでした。多くの操作では複数にする必要があります他のソリューションよりも2倍高速です。たとえば、エンティティを読み込むためのORMLiteと比較して4〜5倍高速です。

関係をサポートします。ドキュメントでは、 リレーションの使用方法と多対多のリレーションをモデル化する方法 について説明しています。

Delete-cascadeは危険なものであるため、greenDAOではサポートされていません。より安全な方法は、トランザクション内でボトムアップでエンティティを削除することです。

11

私は軽量のORMを自分で作成し、Andrormと呼びました。私はDjangoが大好きなので、クエリの構文はよく似ています。フィードバックをお寄せください:)

ウェブページ: http://androrm.com/

GitHubでも: https://github.com/androrm/androrm

10
philgiese

以下は、SORMAでそれを行う方法です-Androidコンテンツプロバイダーソリューション。

  1. 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;
    ......
    
  2. コンテンツプロバイダークラスを作成します。

    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 {
    }
    
  3. AndroidManifest.xmlでコンテンツプロバイダーを定義します。

    <provider    
    Android:authorities="com.gaoshin.sorma.examples.addressbook.AddressBookContentProvider"
    Android:name="com.gaoshin.sorma.examples.addressbook.AddressBookContentProvider" />
    
  4. コンテンツプロバイダーを使用します。

    sorma = SORMA.getInstance(getBaseContext(), AddressBookContentProvider.class);
    
    // insert contact
    Contact contact = new Contact();
    contact.setFirstName("fname1");
    contact.setLastName("lname1");
    sorma.insert(contact);
    

完了!

(詳細はこちら こちら 。)

5
YongJiang Zhang

私はMechanoidDBを使用しており、その作成者です。MechanoidDBは、sqliteでバックアップされたコンテンツプロバイダーを生成するためのdslのようなsqliteを提供します。

見てみな:

http://www.robotoworks.com/mechanoid-plugin/mechanoid-db/

3
Ian Warwick

SQLiteGen を試してください。 Hibernateほど機能が豊富ではありませんが、Eclipseでいくつかの単純なORMクラスを生成できます。

お役に立てば幸いです。

2
Ryan Hayes