You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite Inner Join查询无返回结果?问题排查及修复方案

解决SQLite Inner Join查询无结果的问题

我之前也遇到过类似的情况:关联两张表做Inner Join时明明有匹配数据却返回空Cursor,结合你的代码和修复记录,总结出两个核心问题和对应的解决方法:

1. URI路由错误导致未执行Join查询

在MainActivity里,最初你用了普通的Workout列表URI来触发关联查询,但你的Provider里只有匹配JOIN_TABLE_URI才会执行Join语句,所以根本没走到正确的查询分支。

  • 错误代码:
    Uri uri = withAppendedId(WorkoutContract.WorkoutEntry.CONTENT_URI, id);
    
  • 修复为:
    Uri uri = withAppendedId(WorkoutContract.WorkoutEntry.JOIN_TABLE_URI, id);
    

2. 查询语句硬编码参数,无法动态匹配目标Workout ID

原Join查询里把WHERE条件写死成了workouts._id=1,而且没有传入实际点击的Workout ID作为参数,导致查询的是固定ID的数据,自然找不到你想要的结果。

  • 错误的查询代码:
    final String QUERY = "SELECT workouts._id, " + "exercise_name," + "weight," + "reps," + "rpe"+ " FROM " + "exercises"+ " INNER JOIN workouts ON workouts._id = exercises.workout_id"+ " WHERE workouts._id=1";
    cursor = db.rawQuery(QUERY, null);
    
  • 修复后的动态查询:
    final String QUERY = "SELECT workouts._id, exercise_name, weight, reps, rpe " +
                         "FROM exercises " +
                         "INNER JOIN workouts ON workouts._id = exercises.workout_id " +
                         "WHERE workouts._id=?";
    selectionArgs = new String[]{String.valueOf(ContentUris.parseId(uri))};
    cursor = db.rawQuery(QUERY, selectionArgs);
    

这两个修复完成后,你的Cursor应该就能正确返回对应Workout的所有训练项目了,你可以通过cursor.getCount()打印行数来验证结果。

内容的提问来源于stack exchange,提问作者Omar Carino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:30:06