2010-06-04 49 views
25

我正在寻找一个非常简单的ORM框架在Android上为SQLite工作。我一直在测试ActiveAndroid,但没有一个例子可以在Eclipse上构建。
顺便说一下,如何在SQLite for Android中实现“多对多”关系?你如何反映关于删除行的级联并保证数据库的完整性?ORM在Android SQLite和数据库方案

+0

请看看** [JDXA(http://softwaretree.com/2015/products/jdxa/jdxa.html)**,一个简单的,非侵入式和灵活的ORM for Android。 JDXA支持继承,一对一,一对多和多对多的关系。对于多对多关系,行的删除级联到事务中的中间连接表,维护关系另一方的完整性。看到不同的[代码片段](http://softwaretree.com/2015/products/jdxa/code-snippets.html)。 – 2015-09-30 02:17:18

回答

2

尝试SQLiteGen。它不像hibernate那样功能丰富,但是您可以在Eclipse中使用它生成一些简单的ORM类。

希望有帮助!

27

我是ORMLite的主要作者,它有一个Android后端,它调用原生Android OS数据库API来支持其ORM功能。我们有大量的Android开发者成功地使用了这个框架。在这里看到更多的信息:

http://ormlite.com/sqlite_java_android_orm.shtml

在许多一对多的关系方面,ORMLite不支持级联或任何更高级的ORM功能,但也有容易多对一的例子一对多实现:

http://ormlite.com/docs/examples

+0

易于设置,但学习所有名称的东西,他们似乎不是很烦人。它似乎不符合任何通用数据库术语。也许这只是对我而言,因为我几乎没有使用SQLite的经验。花了整整三天的时间阅读关于如何拼凑这些难题的文档,最终无法让它正常运行。在我看来,不适合与Java初学者结合使用SQLite。 – 2014-12-10 14:53:41

+0

对于@G_V的问题,你能更具体吗?我可以做什么来改进文档?我花了很多时间。 – Gray 2014-12-10 18:08:51

+0

我可以说,这很可能是因为我对原始SQLite android库缺乏经验,但是您已经通过使用名称(如OrmLiteSqliteOpenHelper)传播了内置SQLite库的不理想命名。像经理和助手这样的话并不真正让我看到,作为初学者,发生了什么事情。本周我的时间有点短,但我很快就要花一些时间真正记录我遇到麻烦的地方,因为我认为你的框架非常棒,但是再次,作为SQLite + Android的新手,我觉得那里有在如何让它工作中缺少一些步骤。 – 2014-12-11 08:20:04

5

下面是我如何与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); 
    

完成!

(你可以找到更多信息here。)

+1

指向SORMA教程的链接不再可用。 – JJD 2013-02-05 18:45:13

10

对于那些仍然在寻找一个ORM解决方案,我发布greenDAO几个月前。 Android Market中的多个应用程序已经在使用它。与其他Android ORM工具不同,greenDAO的主要设计目标之一是性能。对于许多操作来说,它应该比其他解决方案快多倍,例如,与ORMLite相比,加载实体的速度要快4-5倍。

它支持关系。该文档描述了how to use relations and how you could model many-to-many relations

删除级联是一件危险的事情,因此greenDAO不支持。更安全的方法是删除事务内部的实体。

+0

我尝试了greendao,这个概念非常棒,你正在生成实体和道,但是你组成发生器的方式并不那么聪明。 – Andy 2013-02-09 00:13:16

+0

你指的是什么? – 2013-02-09 07:42:48

+0

@greenrobot有关如何在层次结构(与同一实体的关系)情况下执行自下而上删除的任何提示? – 2013-02-18 19:17:18

3

我使用并且是Mechanoid DB的作者,它提供了像dsl一样的sqlite用于生成支持sqlite的内容提供者。

检查出来:

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

+0

良好的工作!用它很满意! – 2014-05-13 08:41:09

+0

谢谢你的好评! :) – 2014-05-13 10:42:52

+0

这个概念看起来不错,它背后的想法很好,肯定会尝试一下。 – 2014-12-10 15:57:56