Java 无法从联接的表中获取正确的信息
应用程序应该做什么 该应用程序是一个问答应用程序,有4个可能的答案(只有1个是正确的),具有多个难度级别和多个问题类别 我有一个包含问题的表,一个包含答案的表,还有一个包含难度级别的表,这是我与一个不再接触的人共同开发的(他做了SQL和数据库工作,这就是为什么我在努力)。 有几种测验模式,但是对于这个问题,让我们集中讨论“标准”测验模式(例如简单、中等、困难,它根据难度水平加载问题,并且工作得很好)和“自定义”模式(对于这两种模式,用户在测验开始之前选择一个或多个类别,但不起作用) 获取标准测验模式答案的工作代码如下-同样,这是有效的:Java 无法从联接的表中获取正确的信息,java,android,sql,android-sqlite,Java,Android,Sql,Android Sqlite,应用程序应该做什么 该应用程序是一个问答应用程序,有4个可能的答案(只有1个是正确的),具有多个难度级别和多个问题类别 我有一个包含问题的表,一个包含答案的表,还有一个包含难度级别的表,这是我与一个不再接触的人共同开发的(他做了SQL和数据库工作,这就是为什么我在努力)。 有几种测验模式,但是对于这个问题,让我们集中讨论“标准”测验模式(例如简单、中等、困难,它根据难度水平加载问题,并且工作得很好)和“自定义”模式(对于这两种模式,用户在测验开始之前选择一个或多个类别,但不起作用) 获取标准测验
cursor = getReadableDatabase().rawQuery(
String.format(
"SELECT a.%s %s, question_id, a.text text, is_correct " +
"FROM %s a JOIN %s q ON a.question_id = q.%s " +
"JOIN %s l ON q.level_id = l.%s WHERE l.level = ? AND q.is_active = 1",
BaseColumns._ID, BaseColumns._ID,
ANSWERS_TABLE_NAME, QUESTIONS_TABLE_NAME, BaseColumns._ID,
LEVELS_TABLE_NAME, BaseColumns._ID
),
new String[]{Integer.toString(level)}
我的问题
下面是获取自定义测验模式答案的代码。假设用户选择测验类别“历史”和“技术”(甚至只是其中一个类别)。当我运行此特定查询时,测验加载良好,但不显示任何答案:
cursor = getReadableDatabase().rawQuery(
String.format(
"SELECT a.%s %s, question_id, a.text text, is_correct " +
"FROM %s a JOIN %s q ON a.question_id = q.%s WHERE q.category = ? AND q.is_active = 1 ",
BaseColumns._ID, BaseColumns._ID,
ANSWERS_TABLE_NAME, QUESTIONS_TABLE_NAME, BaseColumns._ID
),
new String[]{thisQuestionCategory});
进一步信息
我很乐意发布有关数据库或应用程序的任何信息(表、列名、Java代码等,请尽管问——我不想立即将其全部转储到这里)
数据库/表信息
根据要求,表中提供了一些信息:
最后
我知道我的其他代码可能有缺陷,导致这个问题,但SQL查询似乎是最好的开始,因为它是我最不熟悉的领域。我已经浏览了其余代码的逻辑,没有发现任何问题,但是如果我们不能发现SQL的任何问题,我可以发布Java代码,这样您就可以看到应用程序是如何结合在一起的。感谢您抽出时间。考虑以下示例表:-
- 注意,id列已命名为\u id,以反映
解析为的值(即,根据屏幕截图,\u id不是id)Base.columns.\u id
Log.d("CURSORINFO",String.valueOf(cursor.getCount())+ " rows were extracted.");
然后运行并检查日志,查看提取了多少行
- 如果数字大于0,则您的问题在别处(稍后)
- 如果数字为0,请尝试删除where子句(例如,下面的代码)并重新运行。如果仍然检索0行,则很可能没有关联数据。i、 e.对于要包含的答案,它必须引用一个问题
cursor = this.getReadableDatabase().rawQuery( String.format( "SELECT a.%s %s, question_id, a.text text, is_correct " + "FROM %s a JOIN %s q ON a.question_id = q.%s", BaseColumns._ID, BaseColumns._ID, ANSWERS_TABLE_NAME, QUESTIONS_TABLE_NAME, BaseColumns._ID ), null);
cursor = this.getReadableDatabase().rawQuery(
String.format(
"SELECT a.%s %s, question_id, a.text text, is_correct " +
"FROM %s a JOIN %s q ON a.question_id = q.%s",
BaseColumns._ID, BaseColumns._ID,
ANSWERS_TABLE_NAME, QUESTIONS_TABLE_NAME, BaseColumns._ID
), null);