2010-06-04 21 views
25

Estoy buscando un marco ORM muy simple que funcione en Android para SQLite. He estado probando ActiveAndroid, pero ninguno de los ejemplos podría construir en Eclipse.
Por cierto, ¿cómo los chicos implementan una relación "muchos a muchos" en SQLite para Android? ¿Cómo se refleja la cascada en cuanto a la eliminación de filas y garantizar la integridad de la base de datos?ORM en Android SQLite y esquema de base de datos

+0

Por favor, echa un vistazo a ** [JDXA] (http://softwaretree.com/2015/products/jdxa/jdxa.html) **, un simple, no -intrusivo y flexible ORM para Android. JDXA admite herencia, relaciones uno-a-uno, uno-a-muchos y muchos-a-muchos. Para una relación muchos a muchos, las eliminaciones de filas caen en cascada hasta la tabla de combinación intermedia en una transacción, manteniendo la integridad del otro lado de la relación. Vea diferentes [Fragmentos de código] (http://softwaretree.com/2015/products/jdxa/code-snippets.html). –

Respuesta

2

Probar SQLiteGen. No es tan rico en características como hibernación, pero puedes generar algunas clases ORM simples con él en Eclipse.

Espero que ayude!

27

Soy el autor principal de ORMLite que tiene un servidor Android que hace que las llamadas a las API de bases de datos nativas del sistema operativo Android sean compatibles con su funcionalidad ORM. Tenemos una gran cantidad de desarrolladores de Android que están utilizando el marco con éxito. Consulte aquí para obtener más información:

http://ormlite.com/sqlite_java_android_orm.shtml

En términos de relaciones de muchos a muchos, ORMLite no es compatible con cascada o cualquiera de las características más avanzadas ORM pero hay ejemplos de fácil muchos- a-muchas implementaciones:

http://ormlite.com/docs/examples

+0

Fácil de configurar, pero aprender todos los nombres de cosas que no son lo que parecen fue muy molesto. Simplemente no parece coincidir con ninguna terminología general de la base de datos. Tal vez me parezca así porque apenas tengo experiencia con SQLite. Pasé tres días completos solo leyendo la documentación sobre cómo se armó este rompecabezas, no pude lograr que funcionara correctamente al final. No es adecuado para SQLite en combinación con los principiantes de Java en mi opinión. –

+0

¿Puede ser más específico en cuanto a los problemas @G_V? ¿Hay algo que pueda hacer para mejorar la documentación? He gastado toneladas de tiempo en eso. – Gray

+0

Puedo decirlo y es muy probable que lo haga debido a mi inexperiencia con las bibliotecas originales de SQLite de Android, pero ha propagado los nombres no ideales de las bibliotecas SQLite integradas al usar nombres como OrmLiteSqliteOpenHelper. Palabras como Manager y Helper realmente no me muestran, como principiante, lo que está sucediendo. Tengo poco tiempo esta semana, pero me tomaré un tiempo para documentar realmente dónde tuve problemas porque creo que tu marco es genial, pero de nuevo, como alguien bastante nuevo en SQLite + Android, sentí que había algunos pasos faltantes en cómo hacer que funcione. –

10

escribí un lightw ocho ORM yo mismo y lo llamé Androrm. Como amo a Django, la sintaxis de la consulta se parece mucho. Por favor, intente y me dé la regeneración :)

página web: http://androrm.com/

también en GitHub: https://github.com/androrm/androrm

+0

Actualmente no es posible descargar el archivo binario liberado. ¿Estás consciente de esto? – wojciii

5

A continuación se muestra cómo lo hago con SORMA - Una solución de proveedor de contenido de Android.

  1. Mapa de Java POJO a la tabla de base de datos:

    @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. Crear contenido de clase de proveedor:

    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. Definir proveedor de contenido en el AndroidManifest.xml:

    <provider  
    android:authorities="com.gaoshin.sorma.examples.addressbook.AddressBookContentProvider" 
    android:name="com.gaoshin.sorma.examples.addressbook.AddressBookContentProvider" /> 
    
  4. utilizar el proveedor de contenido:

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

hecho!

(Puede encontrar más información here.)

+1

El enlace al tutorial SORMA ya no es accesible. – JJD

10

Para aquellos que todavía buscan una solución ORM, Liberé greenDAO hace unos meses. Varias aplicaciones en Android Market ya lo usan. A diferencia de otras herramientas ORM de Android, uno de los principales objetivos de diseño de greenDAO era el rendimiento. Para muchas operaciones, debe ser varias veces más rápido que otras soluciones, p.es 4-5 veces más rápido en comparación con ORMLite para cargar entidades.

Es compatible con las relaciones. La documentación describe how to use relations and how you could model many-to-many relations.

Delete-cascade es algo peligroso, y por lo tanto no es compatible con greenDAO. La forma más segura es eliminar las entidades de abajo hacia arriba dentro de una transacción.

+0

Probé el greendao, el concepto es genial de que estés generando las entidades y dao, pero la forma en que compones el generador no es tan inteligente. – Andy

+0

¿A qué te refieres? –

+0

@greenrobot ¿Alguna sugerencia sobre cómo realizar la eliminación de abajo hacia arriba en caso de una jerarquía (relaciones con la misma entidad)? –

3

Uso, y soy el autor de, Mechanoid DB, que proporciona un sqlite como dsl para generar proveedores de contenido respaldados por sqlite.

Hay que ver:

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

+0

¡¡Buen trabajo !! lo uso estoy bastante satisfecho! –

+0

¡Gracias por tus amables comentarios! :) –

+0

El concepto se ve genial, las ideas detrás de él son buenas, definitivamente voy a probarlo. –

Cuestiones relacionadas