2009-07-10 5 views
2

からのデータの取得:デバッグをアンドロイド:私は、データベースから保存された設定を取得するため、以下の方法で作成したデータベースの問題

public String getEntry(long rowIndex){ 
    String value = ""; 

    Cursor c = db.query(DATABASE_TABLE, new String[] {KEY_NAME, VALUE}, KEY_NAME + "=" + rowIndex, null, null, null, null); 
    int columnIndex = c.getColumnIndex(VALUE); 
    int rowsCount = c.getCount(); 
    if(rowsCount > 0){ 
     String value = c.getString(columnIndex); 
    } 

    return value; 
} 

を私はカーソルCが2列と1行が含まれていますが、それはラインになると見ることができます

String value = c.getString(columnIndex); 

columnIndexが= 1有効なエントリを指し示すべきであるが、それはCursorIndexOutOfBoundsExceptionをスロー。

ここで何が間違っているのでしょうか?

答えて

4

使用しているDB-Wrapperはわかりませんが、私は少しSqliteを知っているので、2つの推測をしたいと思います。それができるのいずれか

:私のラッパーで、ステップ(または次の)あなたがデータを取得するたびにする必要があるC-APIで

  1. 。あなたの例外は、あなたが右の列に位置していないことを示しています。だからあなたは "次の"または "ステップ"(あなたのDB-Wrapperが理解していること)を試すことができます。

  2. このc.getCount()も問題を引き起こす可能性があります。カーソルをカウントするために何ができるでしょうか?終了するまでカーソルを反復することができます。これが起こると、カーソルが使い果たされ、あなたはすべてをやり直すことができます。この時点で読むことは、あなたが持っているものを投げるでしょう。テーブルを2度読み込むことなく問題を回避するには、すべての行を自分で読み込み、カウントを自分で行う必要があります。 DB-Wrapperには、スローされた例外やステータスなど、カーソルがまだ使い果たされているかどうかを確認できる手段が必要です。

あなたのDB-Wrapperの権利を理解したときに、これらの問題の1つが問題になる可能性があります。

+1

IはmoveNext()への呼び出しを追加する必要がありました。タクサ –

2

あなたが値を読み取る前に()c.moveToNextで最初の行にカーソルを移動する必要があります。

public String getEntry(long rowIndex) { 
    String value = ""; 

    Cursor c = db.query(DATABASE_TABLE, new String[] { KEY_NAME, VALUE }, 
      KEY_NAME + "=" + rowIndex, null, null, null, null); 

    int columnIndex = c.getColumnIndex(VALUE); 
    if (c.moveToNext()) { 
     value = c.getString(columnIndex); 
    } 

    return value; 
} 
2

私はNUM、2つのフィールド名を持つ.which以前に作成したデータベースを持っています。

カーソルを使用してこのデータベースからデータを取得したいときに、何らかのエラーが発生しています。 私はここに返さカーソル から同様にgetCount()を使用して、D行を数えることができるが私のコードである:

Cursor c=myDB.query(MY_DATABASE_TABLE,null,null,null,null,null,null); 
    Log.d("cursor",Integer.toString(c.getCount())); 

    if (c.moveToFirst()) 
{ 

do{ 
     String data = c.getString(c.getColumnIndex("name")); 

        Log.v("yo",data); 

       }while(c.moveToNext()); 

} 

エラーは、フィールドスロット0の悪い要求-1 NUMROWS = 5、numColumnsの= 2

関連する問題