android sqlitelog,android-Room-SQLiteLog:(1)SQL变量过多

我有一张约有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 parent;

}

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

选择*从纸杯蛋糕中,名称类似’%’|| :关键字|| ‘%’

该查询将引发以下异常:

too many SQL variables (code 1): , while compiling:

SELECT id,name,parent_id FROM `cupcakes` WHERE parent_id IN

(?,?,?,?...............................

我查看了Room的生成代码,发现它正在为所有实体循环.

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

解决方法:

如果有人碰到这个问题,我将在这里留下这个答案.

正如@CommonsWare所建议的那样,我在查询中添加了一个LIMIT,现在看起来像:

选择*从纸杯蛋糕中,名称类似’%’|| :关键字|| ‘%’LIMIT 500

这种解决方法应归功于@CommonsWare.

标签:android-room,sqlite,android

来源: https://codeday.me/bug/20191025/1926990.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值