2009-05-24 9 views
27

私はアプリケーションを作成していますが、Cursorに問題があります。私が持っている私に返しSQLiteDatabaseCursor私はこの機能を使用して値を取得しよう:カーソルでフィールド値を取得

public Cursor fetchOption(long rowId) throws SQLException { 

    Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, 
     KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null, 
     null, null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 

} 

私はCursor内のフィールドの値を取得する方法がわかりません。

String a = mOptionDb.fetchOption(0).getColumnName(0).toString(); 
String b = mOptionDb.fetchOption(0).getColumnName(1).toString(); 
String c = mOptionDb.fetchOption(0).getColumnName(2).toString(); 

私は列のみ(_id, title, body)の名​​前ではなく、値を取得します。私はそうのようなことを行う場合。どのようにこれを達成するための任意の提案?

答えて

80

あなたはnullをチェックすることを忘れることができると思います。

代わりにデータがあるかどうかを確認してから、カーソルを使用して列にアクセスします。

Cursor cursor = fetchOption(0); 

if (cursor.moveToFirst()) // data? 
    System.out.println(cursor.getString(cursor.getColumnIndex("title")); 

cursor.close(); // that's important too, otherwise you're gonna leak cursors 

また、Androidのチュートリアルを読むために意味をなさないかもしれません。メモ帳のチュートリアルは法案に適合しているようです:http://developer.android.com/guide/tutorials/notepad/index.html

+2

ありがとうございます。今それは動作します。私はカーソルを閉じるためのすべてのアクセスを忘れています... –

+0

あなたの答えはまた私を助けます...ありがとう...あなたに答える...。 – Siten

+1

この問題が発生するたびに、私はここに戻り、cursor.moveToFirst()を忘れてしまったことに気づきます。ありがとう! – user1549672

15

あなたは結果から値を取得するためにCursorget*メソッドを使用することができます。

long id = cursor.getLong(cursor.getColumnIndex("_id")); 
long title = cursor.getString(cursor.getColumnIndex("title")); 
... 

より良い練習は定数(しばしばContentProvidersによって提供される)の代わりに、ハードコードされた文字列とgetColumnIndexへの呼び出しを使用することは明らかです。

+0

: INT A = mOptionDb.fetchOption(0).getColumnIndex( "タイトル")。 "1"が得られます。 しかし、mOptionDb.fetchOption(0).getString(a); は、私はエラーを取得: ERROR/AndroidRuntime(628):キャッチされないハンドラ:キャッチされない例外により ERROR/AndroidRuntime(628)に終了するメインスレッド:android.database.CursorIndexOutOfBoundsException:インデックス0それがあるようなものだ0 の大きさで、要求をデータではありませんか? –

6

このメカニズムを使用することができます。一部のある

Cursor record=db.test(finalDate);  
if(record.getCount()!=0){ 
    if(record.moveToFirst()){ 
     do{    
      Imgid1=record.getString(record.getColumnIndex(Database.PHOTO));     
     }while(record.moveToNext());       
    } 
    record.close();   
} 
関連する問題