使用Room Database构建项目时遭遇‘未使用参数’编译错误
解决Room Database编译错误:Unused parameter: checkInTablePrimaryKey
咱们直接定位到问题核心,你遇到的编译错误是因为DAO方法的SQL查询没有正确引用传入的参数,接下来一步步解决:
错误根源
先看你CheckInTableDao里的这段代码:
@Query("SELECT * FROM check_in_table where checkInTablePrimaryKey = checkInTablePrimaryKey") List<CheckInTable> findCheckIn(int checkInTablePrimaryKey);
这里的WHERE条件写的是checkInTablePrimaryKey = checkInTablePrimaryKey,相当于让数据库列和自身做比较(这个条件永远为真),完全没用到方法传入的checkInTablePrimaryKey参数,所以Room会提示“未使用的参数”错误。
修复方案
修改@Query注解里的SQL语句,用冒号: 前缀来引用方法的参数——就像你在deleteCheckIn方法里正确做的那样:
@Query("SELECT * FROM check_in_table where checkInTablePrimaryKey = :checkInTablePrimaryKey") List<CheckInTable> findCheckIn(int checkInTablePrimaryKey);
这样Room就能识别到你要把方法的参数值注入到SQL语句中,编译错误会直接消失。
额外潜在问题提醒
顺便帮你检查出Repository里的一个小疏漏,不修复的话后续运行会崩溃:
public void deleteCheckIn(int checkInTablePrimaryKey) { CheckInTableRepository.DeleteAsyncTask task = new CheckInTableRepository.DeleteAsyncTask(checkInTableDao); task.execute(); // 这里没有传入参数! }
你的DeleteAsyncTask的doInBackground方法需要接收一个Integer参数,但当前调用execute()时没传值,运行时会抛出数组越界异常,需要改成:
task.execute(checkInTablePrimaryKey);
验证修复
修改完上述两处后,重新编译项目,那个“Unused parameter”的编译错误就会解决,同时也规避了后续运行时的潜在崩溃问题。
内容的提问来源于stack exchange,提问作者GeorgeRussell
相关产品推荐
相关产品推荐

