我查询数据库时遇到问题。 (sqlitedb)
我想查询数据库中的2个选项,当我查询第一行时一切正常,但是当我想查询第二行时,我得到空指针。
看看我的代码:
public AbsenceData getAbsence( int _subjectId, long date ) {
AbsenceData absence = null;
Cursor cursor = null;
cursor = mDb.query(
ABSENCES_TABLE_NAME,
new String[] { ABSENCE_TYPE, ABSENCE_NOTE },
SUBJECT_ID + "=?" + " AND " + ABSENCE_DATE + "=?",
new String[] { String.valueOf( _subjectId), String.valueOf( date ) },
null, null, null
);
if( cursor.moveToFirst() ) {
absence = new AbsenceData( 0, 0, 0l,cursor.getInt( 0 ), cursor.getString( 1 ));
}
return absence;
}
我有两个参数:subjectId和date, 例如。我查询subjectId = 1,日期=今天 - >>我得到想要的数据, 但是当我查询subjectId = 1时,date =明天 - >>空指针,
在数据库中我可以看到更明天的日期,所以它应该给我想要的数据,但它没有......
提前感谢您的帮助。
答案 0 :(得分:0)
但是当我想查询第二行时,我得到空指针
如果您假设可以有多行,我建议您使用正确的循环:
if (c.moveToFirst()) {
do {
Absence a = new Absence();
a.setName(c.getString(c.getColumnIndex("name")));
...
} while (c.moveToNext());
}
特别是在您的情况下,您的 NPE
会被抛出,因为如果您明天通过日期,您的光标为空并且您的条件未被应用,因此您的缺席是分配到 NULL
并以此状态返回。
如果你想修复它,你需要像这样初始化你的对象:
AbsenceData absence = new AbsenceDate();
注意:如果仅创建参数,则需要添加默认构造函数。