标签: ormlite

Green DAO vs ORM lite vs Active Android

哪个是适用于Android的最佳ORM工具?

我看到ORMlite和ActiveAndroid是最受讨论的,我的一个朋友建议我使用GreenDAO.那么寻找一些可以帮助我做决策的知识资源?

我希望判断的功能是免费提供(开源),良好的文档,活动论坛,稳定版本等,这是开发人员所需要的.

android ormlite activeandroid greendao droidparts

60
推荐指数
3
解决办法
3万
查看次数

使用从Jackson创建的对象在Android上使用OrmLite保存子集合

我有一个REST服务,我正在从我的应用程序调用,它将一个JSON对象作为一个JSON对象byte[],然后变成一个漂亮的嵌套对象集合 - 所有这一切工作正常.我当时想要做的就是使用OrmLite将这些对象持久化到SQLite存储,这就是事情开始崩溃的地方,因为据我所知,OrmLite不会自动持久化嵌套对象.

为简单起见,让我们删除我的实际功能,并让我的对象简单地建模如下:

@DatabaseTable(tableName = "parents")
public class Parent {

    @DatabaseField(id=true)
    private String name;

    @ForeignCollectionField
    // have to use Collection here because needs to be compatible with Jackson
    private Collection<Child> children; 

    /* Getters and setters go here */
}

@DatabaseTable(tableName = "children")
public class Child {

    @DatabaseField(id=true)
    private String name;

    @DatabaseField(foreign=true)
    private Parent parent;

    /* Getters and setters go here */
}
Run Code Online (Sandbox Code Playgroud)

发生的情况是,在Parent使用我的相应parentDao对象添加在数据库中创建新对象时,子项不会与父项一起保留.

这是一个常见的问题并且之前已经提出过,在SO上肯定还有其他问题与这个非常类似,最值得注意的是在Android上用ORMLite保存嵌套的外来对象,以回答Gray建议在父对象之前创建子对象的问题.可以正常手动创建我的POJO.

但是,我还没有看到一个答案,这些因素是由另一个库(在本例中为Jackson)生成对象的情况.没有深入挖掘杰克逊的反序列化内部(它消除了其简单性的全部好处)并试图让杰克逊创建子对象然后将它们添加到父对象(除非我遗漏了一些东西,这比听起来容易吗?)在这种特殊情况下,这似乎不是一个特别有吸引力的解决方案.

同样,还有其他解决方案涉及向外键添加更多注释,这些注释似乎适合处理单个子对象,但在使用@ForeignCollectionFields及其相应的Collections 时,这些注释不可用.

java orm android jackson ormlite

55
推荐指数
1
解决办法
1814
查看次数

将ORMLite与SQLite和Android一起使用的好教程是什么?

我正在寻找一个关于如何在SQLite和Android中使用ORMLite的好的入门教程.一个qucick谷歌搜索没有产生任何有用的信息.

sqlite android ormlite

47
推荐指数
2
解决办法
4万
查看次数

在Android上使用ORMLite保存嵌套的外部对象

在Android上工作时,ORMLite是否只保存浅层对象?我有一个嵌套对象的数据结构,这两个对象都是新创建的,我希望能够通过一次调用dao.create()来保存它们.

例如,我有以下父类.

@DatabaseTable
public class Parent {

  @DatabaseField(generatedId=true)
  public int id;

  @DatabaseField
  public String name;

  @DatabaseField
  public Child child;
}
Run Code Online (Sandbox Code Playgroud)

和以下儿童班.

@DatabaseTable
public class Child {

  @DatabaseField(generatedId=true)
  public int id;

  @DatabaseField
  public String name;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做到以下几点.

Parent parent = new Parent();
parent.name = "ParentName";

Child child = new Child();
child.name = "ChildName";

parent.child = child;

//  .. get helper and create dao object...
dao.create(parent);
Run Code Online (Sandbox Code Playgroud)

执行此操作时,父对象是持久的但不是子对象,并且child_id父表中的自动生成列设置为0.这是正常行为吗?有没有办法让嵌套对象保持不变并传播主键?

android ormlite

40
推荐指数
2
解决办法
2万
查看次数

JavaFX,将ArrayList转换为ObservableList

有没有办法投ArrayListObservableList?我想不经过迭代就这样做ArrayList.

更具体地说,我使用ORMLite从数据库中获取数据,我需要ObservableList作为从DB获取数据的方法的输出.

目前我正在做这样的事情:

ArrayList<Stavka> listStavaka = new ArrayList<>(); 
Dao<Stavka, Integer> stavkaDao = DaoManager.createDao(connection, Stavka.class);
listStavaka = (ArrayList<Stavka>) stavkaDao.queryForAll();
ObservableList<Stavka> oListStavaka = FXCollections.observableArrayList();
for (Stavka stavka : listStavaka) {
    oListStavaka.add(stavka);
}
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

ObservableList<Stavka> listStavaka = FXCollections.observableArrayList();
Dao<Stavka, Integer> stavkaDao = DaoManager.createDao(connection, Stavka.class);
listStavaka = (ObservableList<Stavka>) stavkaDao.queryForAll();
Run Code Online (Sandbox Code Playgroud)

java javafx arraylist ormlite observablelist

40
推荐指数
1
解决办法
6万
查看次数

使用ORMLite的Android Cursor在CursorAdapter中使用

有没有办法,如何获取查询的Cursor,我正在使用ORMLite Dao对象处理?

sqlite android cursor ormlite

34
推荐指数
1
解决办法
2万
查看次数

Android Studio运行ORMLite配置生成配置

我正在使用Android Studio,并希望使用ORMLite框架.ORMLite for Android有一种通过表配置文件创建DAO的机制.

如何在Android Studio中设置其他运行配置以生成此配置?

android ormlite android-studio

34
推荐指数
4
解决办法
1万
查看次数

ORM性能:greenDAO比ORMLite快吗?

我一直在我的应用程序中使用ORMLite,我正在考虑是否转向greenDAO.

性能是该决定的重要组成部分,greenDAO的功能页面说:

对于相同的给定实体,greenDAO插入和更新实体的速度提高了2倍,并且加载实体的速度比ORMLite快4.5倍.
...
(图表和图表更新于10-23-2011)

我认为ORMLite的配置文件生成步骤应该在运行时不需要反射.

ORMLite changlog表明greenDAO基准测试是在配置文件功能发布后完成的,但是greenDAO功能页面没有明确说明是否为测试生成了静态配置文件.

4.26:9/26/2011(svn r1978)
*ANDROID:添加了字段配置实用程序,以避免带注释的Dao创建性能问题.

从那以后,也有ORMLite性能修复,例如

4.40:4/16/2012(svn r2516)
*ANDROID:创建DAO时出现大的性能错误修复.外部字段总是使用反射而不是表格配置.

谁能确认greenDAO和ORMLite之间是否仍有很大的性能差异?谢谢!

sqlite performance android ormlite greendao

31
推荐指数
1
解决办法
2万
查看次数

将ForeignCollection转换为ArrayList - ORMLite,Gson和Android

如果我对我的解释不是很清楚,我会道歉但是如果要求,我会添加并编辑这个问题.

我正在开发一个Android应用程序,它通过外部API接收数据,并使用ORMLite在本地存储数据.在本地存储数据并使用ORMLite之前,我有一些模型从服务器检索JSON并通过以下方式对其进行解析:

Gson gson = new Gson();

String result = ApiClient.httpPost("/user_route");

User user = gson.fromJson(result, User.class);
Run Code Online (Sandbox Code Playgroud)

User类已定义

public class User {
  int id;
  String name;
  ArrayList<Image> media;
}
Run Code Online (Sandbox Code Playgroud)

而Image类:

public class Image {
  int id;
  int creator_id;
  String url;
}
Run Code Online (Sandbox Code Playgroud)

这是模型和方法的简化表示,但我相信我保留了所有相关信息.BTW,media是一个包含的JSON对象Images.

现在我还试图在本地存储数据.为了使用ORMLite在Users和Images之间建立关系,你似乎必须使用ForeignCollection类和@ForeignCollectionField注释.我不相信Gson可以直接media将User类中的字段作为ForeignCollection对象解析,所以我认为我需要创建两个字段mediaCollectionmedia.

使用ORMLite,User类现在看起来像这样:

@DatabaseTable(tableName = "Users")
public class User {
  @DatabaseField(generatedId = true)
  int id;

  @DatabaseField
  String name;

  @ForeignCollectionField
  ForeignCollection<Image> mediaCollection;

  ArrayList<Image> media;
}
Run Code Online (Sandbox Code Playgroud)

带有ORMLite的Image类如下所示:

@DatabaseTable(tableName = "Images")
public class …
Run Code Online (Sandbox Code Playgroud)

android arraylist gson ormlite foreign-collection

29
推荐指数
1
解决办法
1万
查看次数

如何从ORMLITE中删除记录?

我需要删除ORMLite数据库中的记录我可以通过id删除记录,如下所示

@Override
public void Delete(int id) throws SQLException {
    this.dao.deleteById(id);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我必须删除同一个表中的记录而不是id,而是通过名称或任何其他字段我想要的东西

public void Deletefromcanteen(String name,MealType mealtype) {
    this.dao.deletebyName(name);
}
Run Code Online (Sandbox Code Playgroud)

我应该使用querybuilder写什么查询来删除name = name和mealtype = say(午餐)的记录

我在databasehelper类中尝试过类似的东西

public  void deletefromcanteen(int id, String mealtype) {
    try {
        Dao<CanteenLog, Integer> canteenDao = getCanteen();
        DeleteBuilder<CanteenLog, Integer> deleteBuilder = canteenDao
                .deleteBuilder();
        deleteBuilder.where().eq("user_id", id).and().eq("meal", mealtype);
        canteenDao.delete(deleteBuilder.prepare());
    } catch (Exception e) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

android ormlite

26
推荐指数
1
解决办法
2万
查看次数