2011-11-14 8 views
0

カーソルを使用してデータベースから値を取得するときにアンドロイドデータベースアプリケーションを作成しています それは私に次の例外を与えます。Android:java.lang.IllegalStateException:行0列-1からフィールドスロットを取得しました

java.lang.IllegalStateException: get field slot from row 0 col -1 failed 

私は、フェッチのために、次のコードを使用しています:

public Cursor fetchChildren(String KEY_){ 

      Cursor c = db.rawQuery("SELECT children FROM " + DATABASE_TABLE_NAVIGATION 
        + " WHERE key_ = ?", new String[] {KEY_}); 
       return c; 
      } 



    try{ 
    for(int k=0;k<n;k++){ 
     db.open(); 
    System.out.println("children are"); 
     Cursor cursor=db.fetchChildren(keys_a); 
     if (cursor.moveToFirst()) // data? 
      { 
     System.out.println(cursor.getString(9)); 
    } 
    } 
db.close(); 
    } 
    catch(Exception e) 
    { 
    System.out.println(e); 
     } 
+0

なぜ、反復ごとに 'db'を開くのですか? –

+0

たとえそれを開いてもそれは私に同じ例外を与えていません – ekjyot

答えて

4

利用System.out.println(cursor.getString(0))代わりのSystem.out.println(cursor.getString(9));

かは、あなたのロジックでSystem.out.println(cursor.getString(cursor.getColumnIndex("children"));

問題を使用します。

データベースから単一の列をフェッチしています。したがって、カーソルは1つの列(子)しか持たない。カラムインデックスが0(最初のカラムは0、2番目のカラムは1)であることがわかっているので、getString()に0を渡す必要があります。別の方法は、カーソルの列インデックスを検索し、それをgetString()で渡すことです。 getColumnIndex(java.lang.String)としてカーソル内の列名のインデックスを計算し、getString(int)の範囲内で使用します。

希望すると、これが役立ちます。

+0

ありがとう@Pankaj Kumar – ekjyot

+0

私はすでにupvoted :) – ekjyot

関連する問題