如何告诉ORMLite不要用null覆盖DB中的值

时间:2014-04-18 12:58:02

标签: android sqlite ormlite

我使用ORMLite for Android将数据存储在SQLite数据库中。

在某些情况下,我从WebService收到不完整的信息,因此我的一些对象值为null。然后,ORMLite尝试将新对象(带有空值)存储到SQLite数据库中。

我想要实现的是,如果本地数据库已经有了值,ORMLite将跳过存储具有空值的属性。

例如:我有一个带有名字和姓氏的本地Person对象。当我收到来自WebService的新数据时,它只包含名字(这意味着姓氏== null)而我调用personDAO.udpate(receivedPersonObject),数据库中的姓氏将被覆盖为空。

使用update()方法时,有没有办法阻止ORMLite将空值写入数据库?

3 个答案:

答案 0 :(得分:4)

  

使用update()方法时,有没有办法阻止ORMLite将空值写入数据库?

没有。您可以使用canBeNull = false标记该字段,但如果尝试使用null进行更新,则会抛出异常。我认为您必须检查值以查看是否存在空值或使用UpdateBuilder并仅更新您需要更新的特定字段。

UpdateBuilder<Foo,Integer> updateBuilder = new UpdateBuilder<Foo,Integer>();
updateBuilder.where().eq(Foo.ID_FIELD, foo.getId());
if (foo.getFirstName() != null) {
   updateBuilder.where().eq(Foo.FIRST_NAME_FIELD, foo.getFirstName());
}
if (foo.getLastName() != null) {
   updateBuilder.where().eq(Foo.LAST_NAME_FIELD, foo.getLastName());
}
...
updateBuilder.update();

答案 1 :(得分:1)

另一种可以解决这个问题的方法是:

  1. 从具有特定ID的数据库中获取现有对象。
  2. 将从数据库中检索到的对象的属性更新为传入的对象,检查空值和其他业务规则。
  3. 将更新的对象保留回数据库。
  4. 希望这有帮助。

答案 2 :(得分:0)

在调用update()方法

之前,您应该自己检查空值