将空值加载到基元类型中

时间:2012-02-13 12:44:59

标签: android ormlite

我正在尝试使用ormlite查询方法将数据库行加载到DO对象中。我面临的问题是数据库中的空值被映射到DO对象中的Wrapper类型字段。空字段填充到DO中为0,这会影响我的业务逻辑。

是否有可能导致ormlite将这些字段填充为null而不是0。

我的样本DO结构:

@DatabaseTable(tableName="PERSON")
public class Person
{
   @DatabaseField(columnName="NAME", dataType=DataType.STRING, useGetSet=true)
   private String name;

   @DatabaseField(columnName = "AGE", dataType = DataType.SHORT, useGetSet = true)
   private Short age;

   public String getName() 
   {
      return name;
   }

   public void setName(String name) 
   {
      this.name = name;
   }

   public Short getAge() 
   {
     return age;
   }

   public void setAge(Short age) 
   {
     this.age = age;
   }
}

我用来加载对象的DAO代码是:

person = queryForEq("NAME", someName).get(0);

总而言之,在Person类中,如果人的年龄在SQLite数据库中存储为null,则在查询对象时,ormlite将填充为0。我想避免这种情况,并确保将年龄设置为null。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

此处正确的做法是不将dataType指定为@DatabaseField注释的一部分。然后,ORMLite会正确使用DataType.SHORT_OBJ字段类型。由于您要覆盖默认字段类型并且说Short字段实际上是原语,如果ORMLite 为其分配了空值,则会导致NPE,因此它会分配0。您的数据对象应该是:

@DatabaseField(columnName="NAME", useGetSet=true)
private String name;

@DatabaseField(columnName = "AGE", useGetSet = true)
private Short age;

实际上你永远不需要指定dataType,除非你覆盖某些内容或者ORMLite无法做出好的自动类型确定(例如:byte[])。