在Android Room中使用@Insert注释跳过null

时间:2019-02-06 11:16:05

标签: java annotations sql-insert android-room

我使用DAO将对象数组(例如User [])插入到Room表中:

python

但是,User []中的某些对象可能为空。在这种情况下,insertAll()方法将引发NullPointerException。

是否可以以某种方式跳过空值?我宁愿使用@Insert批注,而不是编写自定义插入查询或预先过滤掉空值。

3 个答案:

答案 0 :(得分:1)

尝试对可以具有空值的实体字段使用默认值注释,例如:@ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")

同样对于可以有空值的实体字段放置@Nullable 注解。

答案 1 :(得分:0)

  1. 制作另一个具有相同对象类型的数组
  2. 称它为温度
  3. 遍历第一个数组
  4. 如果element [i]为null,则将其排除在温度范围之外
  5. 传入temp作为方法的参数

此处的某人可能知道某种库定义的方法来完成您想做的事情,但是我首先想到了这种解决方案。

答案 2 :(得分:0)

我希望Room可以实现一个实用程序来实现此目的,例如像@Ignore(null)这样的注释,但事实并非如此。这是我目前的解决方案:

调用ArrayUtils.removeAllOccurences(users, null)的方法org.apache.commons.lang3.ArrayUtils,并将结果用作insertAll()的参数。