SQLite查询中的CursorIndexOutOfBoundsException

时间:2018-09-09 01:42:42

标签: android sqlite

我一直在努力使用表字段之一查询SQLite数据库。我使用ForeignId字段成功查询,但没有使用表Available的{​​{1}}字段查询。我希望您能指出我错过的事情。这是我对函数QuizTable的调用。请注意,queryQuiz(截断的种类)应该用于过滤whereClause字段的值available。 (旁注:如果要查询其他数据类型该怎么办?)

1

这是我的queryQuiz函数,在扩展QuizCursorWrapper cursor = db.queryQuiz(QuizTable.Cols.AVAILABLE + "=?", new String[]{"1"}); 的类中。 这是我因致电SQLiteOpenHelper而遇到的错误: queryQuiz

Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

我的public QuizCursorWrapper queryQuiz(String whereClause, String[] whereArgs){ Cursor cursor = db.query( QuizTable.NAME, null, whereClause, whereArgs, null, null, null ); return new QuizCursorWrapper(cursor); }

QuizCursorWrapper

最后是我的public class QuizCursorWrapper extends CursorWrapper { public QuizCursorWrapper(Cursor cursor){ super(cursor); } public String getQuiz(){ String paragraph = getString(getColumnIndex(QuizSchema.QuizTable.Cols.PARAGRAPH)); return paragraph; } public String getQuizUUID(){ String uuid = getString(getColumnIndex(QuizSchema.QuizTable.Cols.UUID)); return uuid; } } ,它定义了表中的字段。

QuizSchema

我很困惑,因为我可以在测验表中清楚地看到public class QuizSchema { public static final class QuizTable{ //nested class public static final String NAME = "quizTable"; public static final class Cols{ public static final String SCORE = "score"; public static final String PARAGRAPH = "paragraph"; public static final String FOREIGNID = "foreignId"; public static final String UUID = "uuid"; public static final String AVAILABLE = "available"; } } } 字段等于1的行。对这个广泛的问题很抱歉,只是我无法解决问题,而调试器的帮助也不太大。如果您需要更多信息,请告诉我。

enter image description here

1 个答案:

答案 0 :(得分:2)

我相信您的问题是列存储类/类型关联性如何影响比较。

解决方案是强制类型关联,从而进行比较。可以使用 CAST 设置类型关联性来强制类型关联性。

这样的解决方案可能是投射以键入 INTEGER 进行比较。您可以使用:-

QuizCursorWrapper cursor = db.queryQuiz("CAST(" + QuizTable.Cols.AVAILABLE + " AS INTEGER) =CAST(? AS INTEGER)", new String[]{"1"});

您可能希望阅读:-

Datatypes In SQLite Version 3