房间 - SQLiteLog:(1) SQL 变量太多
Room - SQLiteLog: (1) too many SQL variables
我有一个 table 大约 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
这个 class:
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 语句之外,还有其他解决方法吗?
在下面使用类似的查询..
@Query("SELECT * FROM MyTable WHERE name LIKE '%' || :arg0 || '%'")
List<MyTable> getData(String arg0);
我会在这里留下这个答案,以防有人遇到这个问题。
根据@CommonsWare 的建议,我在查询中添加了一个 LIMIT
,现在看起来像:
SELECT * FROM cupcakes WHERE name LIKE '%' || :keyword || '%' LIMIT 500
此解决方法归功于@CommonsWare。
我有一个 table 大约 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
这个 class:
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 语句之外,还有其他解决方法吗?
在下面使用类似的查询..
@Query("SELECT * FROM MyTable WHERE name LIKE '%' || :arg0 || '%'")
List<MyTable> getData(String arg0);
我会在这里留下这个答案,以防有人遇到这个问题。
根据@CommonsWare 的建议,我在查询中添加了一个 LIMIT
,现在看起来像:
SELECT * FROM cupcakes WHERE name LIKE '%' || :keyword || '%' LIMIT 500
此解决方法归功于@CommonsWare。