0

次のクエリでデータベースにクエリを実行しています。

    final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(1) + "'", null);

カーソル数をログに記録すると、カウントとして 1 が返されますが、 subject_cursor.getString(0)を使用してデータにアクセスしようとすると、次のエラーが表示されます。

    05-30 03:37:10.921: W/System.err(5408): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

データベースのレコードを手動で確認しましたが、必要なデータはすべて存在しています。(また、次のクエリを実行した場合:

    "SELECT * FROM " + DB.Table.SUBJECT"

同じテーブルの場合、カーソルのカウントを取得すると、正しい既存のレコード数が得られます)。

助けてください...

4

3 に答える 3

3

Cursor Index Out of Bounds Exception の投稿全体を確実に読む必要があります。それはまったく同じ問題を扱っており、そこで問題に対する答えを得ることができます。投稿から取得して@Alexeyが指摘したものに追加すると、Cursors遅延ロードされ、 moveToFirst()またはmoveToPosition()などのメソッドを呼び出してメモリにロードする必要があります。moveToFirstアクセスできるように、カーソルを最初の行に移動します。同様にmoveToPosition()、カーソルを絶対位置に移動します。これらの関数を使用しないと、取得していたエラーがスローされます。お役に立てれば。

于 2013-05-30T04:10:21.483 に答える
1
if(subject_cursor.moveToFirst()) 
    subject_cursor.getString(0);
于 2013-05-30T03:56:20.760 に答える
0

コードを次のように変更します

 final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(0) + "'", null);

テーブルには1行しかなく、次を使用して2行目をフェッチしようとしているためですcs_cursor.getString(1)

または、このコードを試してください。

public void getAllEvents() {



    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_EVENTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {




            // Adding contact to list
            MainActivity.Id.add(cursor.getString(0)); //it will store id to my array list "Id"


        } while (cursor.moveToNext());
    }


}
于 2013-05-30T04:03:41.850 に答える