Room - SQLiteLog:(1)SQL变量太多

时间:2018-04-19 10:43:37

标签: android sqlite android-room

我有一张约10,000条记录的表格。

示例,我有以下实体:

@Entity(tableName="cupcakes")
public class CupcakeEntity {

  @PrimaryKey(autoGenerate = true)
  @ColumnName(name = "id")
  long id;

  @ColumnName(name = "name")
  String name;

  @ColumnName(name = "parent_id")
  Long parentId;
}

然后,我自我加入CupcakeEntity这个班:

public class CupcakeModel {

  @Embedded
  CupcakeEntity cupcake;

  @Relation(parentColumn = "id", entityColumn = "parent_id")
  List<CupcakeEntity> parent;
}

当我使用SQL语句获取CupcakeModel时:

SELECT * FROM cupcakes WHERE name LIKE '%' || :keyword || '%'

查询将抛出以下异常:

too many SQL variables (code 1): , while compiling: 
SELECT id,name,parent_id FROM `cupcakes` WHERE parent_id IN
(?,?,?,?...............................

我查看了Room生成的代码,发现它已经为所有实体循环。

除了创建自己的JOIN语句之外,还有其他解决方法吗?

2 个答案:

答案 0 :(得分:4)

我会在这里留下这个答案,以防有人碰到这个问题。

根据@CommonsWare的建议,我在查询中添加了LIMIT,现在看起来像:

SELECT * FROM cupcakes WHERE name LIKE '%' || :keyword || '%' LIMIT 500

致信@CommonsWare以解决此问题。

答案 1 :(得分:0)

在下面用于查询...

    @Query("SELECT * FROM MyTable WHERE name LIKE '%' || :arg0 || '%'")
List<MyTable> getData(String arg0);