Room@Dao编译跳转报错解决-没有用到的Dao会这样

Room@Dao编译跳转报错解决-没有用到的Dao会这样

编译提示
> Task :user_lib:compileDebugJavaWithJavac
����: Current JDK version 1.8.0_221-b11 has a bug (https://bugs.openjdk.java.net/browse/JDK-8007720) that prevents Room from being incremental. Consider using JDK 11+ or the embedded JDK shipped with Android Studio 3.5+.
E:\AndroidProject\lqbsProjects\lqbs_android\user_lib\src\main\java\com\lqbs\gyso\data\database\LoginInfoDao.java:19: ����: The query returns some columns [id, uuid, ip, location, terminal_type, time] which are not used by com.lqbs.gyso.data.http.LoginInfo.

You can use @ColumnInfo annotation on the fields to specify the mapping. 
 
You can annotate the method with @RewriteQueriesToDropUnusedColumns to direct Room to rewrite your query to avoid fetching unused columns. com.lqbs.gyso.data.http.LoginInfo has some fields [name, email, passWord, headUrl, token] which are not returned by the query.

 If they are not supposed to be read from the result, you can mark them with @Ignore annotation.
 
 You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: id, uuid, ip, location, terminal_type, time, state. Fields in com.lqbs.gyso.data.http.LoginInfo: name, email, passWord, headUrl, state, token.
    LiveData<List<LoginInfo>> getLoginInfoByUUID(String uuid);
原因

项目中没有使用这个Dao。

解决

按提示提示说有如下解决办法:
1 这是1.8.0_221-b11的bug,可以升级jdk到11
2 使用@ColumnInfo 指定使用的列属性
3 使用@RewriteQueriesToDropUnusedColumns
4 添加@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)到方法前

试过方法4 有效

@Dao
public interface LoginInfoDao {
    @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
    @Query("SELECT * FROM login_info_tb WHERE uuid=:uuid")
    LiveData<List<LoginInfo>> getLoginInfoByUUID(String uuid);
}
### 回答1: @DatabaseField是Java中ORM框架中的注解,用于定义实体类中属性与数据库表中字段的映射关系,常见的报错有: 1. ClassNotFoundException: 当找不到实体类对应的数据库表时出现此错误。可以检查实体类的包名、类名和表名是否正确。 2. SQLException: 当操作数据库时出现错误时出现此错误。可以检查数据库连接是否正常、表结构是否正确等。 3. IllegalArgumentException: 当使用错误的参数时出现此错误。可以检查注解的参数是否正确。 4. IllegalStateException: 当使用不正确的状态时出现此错误。可以检查实体类是否正确地使用了ORM框架。 如果您能提供更具体的报错信息和代码,我可以更好地帮助您解决问题。 ### 回答2: @DatabaseField报错通常是因为在使用数据库操作框架时出现了问题。@DatabaseField是一个注解,用于标识字段在数据库表中的映射关系。一般来说,@DatabaseField注解应该添加在类的属性上,表示该属性对应于数据库表中的一个字段。 当出现@DatabaseField报错时,我们首先要确认是否正确导入了相应的数据库操作框架,比如说使用了由注解处理器生成的代码等。如果没有正确导入相关的库或框架,就出现@DatabaseField报错。 此外,还需要检查代码中是否遵循了使用@DatabaseField注解的规范。例如,是否将@DatabaseField注解添加在了正确的位置上,比如字段的前面。如果将@DatabaseField注解添加在了其他位置,也导致报错。 其他可能导致@DatabaseField报错的原因包括:注解参数传递错误、注解使用方式不正确、注解处理器配置错误等。在解决这些问题时,我们可以参考相关框架的文档或官方指南,查找问题的解决方案。 总之,当出现@DatabaseField报错时,我们需要仔细检查代码中的注解使用是否正确,并考虑是否需要导入相关的库或框架。同时,快速定位报错信息,参考文档或官方指南,可以帮助我们尽快解决问题。 ### 回答3: 当使用@DatabaseField进行数据库字段映射时,报错通常是由于以下几个原因导致的: 1. 依赖库错误:首先,确认是否已正确导入数据库框架的依赖库,例如GreenDAORoom等。如果未正确导入依赖库,编译时将无法识别@DatabaseField注解导致报错。 2. 未配置数据库:另外一个可能的原因是未正确配置数据库的相关信息。例如,如果使用了GreenDAO框架,需要在Application类中进行数据库的初始化和配置,包括数据库名称、版本号、实体类的包名等。若未正确配置,编译时也报错。 3. 注解位置错误:@DatabaseField注解需要在合适的位置使用。通常情况下,@DatabaseField注解应该放置在实体类的属性上,用于标注此属性对应的数据库字段。如果将@DatabaseField使用在其他位置或者没有正确放置在属性上,编译报错。 4. 注解属性错误:最后,报错也可能是由于@DatabaseField注解的属性设置错误引起的。检查注解的各个属性值是否合法、正确。例如,注解的属性名是否正确拼写、属性类型是否与实体类的属性类型相匹配等。属性设置错误也导致编译报错。 总之,当报错出现时,首先检查是否导入了正确的依赖库,并正确配置了数据库;然后确保将注解放置在合适的位置,并检查注解的属性设置是否正确。通过逐一排查这些可能原因,您应该能够找到并解决@DatabaseField报错的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值