我一直在努力使用表字段之一查询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的行。对这个广泛的问题很抱歉,只是我无法解决问题,而调试器的帮助也不太大。如果您需要更多信息,请告诉我。
答案 0 :(得分:2)
我相信您的问题是列存储类/类型关联性如何影响比较。
解决方案是强制类型关联,从而进行比较。可以使用 CAST 设置类型关联性来强制类型关联性。
这样的解决方案可能是投射以键入 INTEGER 进行比较。您可以使用:-
QuizCursorWrapper cursor = db.queryQuiz("CAST(" + QuizTable.Cols.AVAILABLE + " AS INTEGER) =CAST(? AS INTEGER)", new String[]{"1"});
您可能希望阅读:-