0

データベースのクエリに問題があります。(sqlitedb)

最初の行を照会するときはすべて問題ありませんが、2 行目を照会するときは null ポインターを取得します。

私のコードを見てください:

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 の 2 つの引数があります。subjectId = 1、date = 今日のクエリ - >> 必要なデータを取得しますが、subjectId = 1、date = 明日のクエリを実行すると、- >> nullpointer、

さらに、データベースには明日の日付が表示されるので、必要なデータが得られるはずですが、そうではありません...

助けてくれてありがとう。

4

1 に答える 1

0

しかし、2行目をクエリしたいとき、nullポインタを取得します

複数の行が存在する可能性があると想定している場合は、正しいループを使用することをお勧めします。

if (c.moveToFirst()) {
   do {
      Absence a = new Absence();
      a.setName(c.getString(c.getColumnIndex("name")));
      ...

   } while (c.moveToNext());
}

特にあなたの場合、NPE明日の日付を渡すとカーソルがになり、条件が適用されないため、不在が割り当てられNULL、この状態で返されるため、スローされます。

修正したい場合は、次のようにオブジェクトを初期化する必要があります。

AbsenceData absence = new AbsenceDate();


注:パラメトリックのみを作成した場合は、既定のコンストラクターを追加する必要があります。

于 2013-08-09T10:27:53.563 に答える