2009-07-10 8 views
2

나는 데이터베이스에서 저장된 설정을 검색하기위한 다음과 같은 방법을 만들어 : 나는 커서 (C)가 두 개의 열과 하나 개의 행을 포함하지만이 때 줄을 볼 수 디버깅에안드로이드 : 데이터베이스 문제에서 데이터를 가져 오는

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; 
} 

String value = c.getString(columnIndex); 

유효한 항목을 가리켜 야하는 columnIndex = 1이지만 CursorIndexOutOfBoundsException을 발생시킵니다.

여기에 무엇이 잘못 될 수 있는지 아는 사람이 있습니까?

답변

4

DB-Wrapper를 사용하고 있는지 모르겠지만 Sqlite를 조금 알고 있기 때문에 두 가지 추측을하고 싶습니다. 그것은 될 수 중 하나

: 내 래퍼에서 그것을 단계 (또는 다음)은 데이터를 검색 할 때마다 할 필요가있다은 C-API에서

  1. . 귀하의 예외는 귀하가 올바른 행에 위치하지 않는다는 것을 나타냅니다. 따라서 "다음"또는 "단계"(DB-Wrapper가 이해할 수있는 것)를 시도 할 수 있습니다.

  2. c.getCount()도 문제를 일으킬 수 있습니다. getCount가 커서를 계산하려면 무엇을 할 수 있습니까? 그것은 끝날 때까지 커서를 반복 할 수 있습니다. 이런 일이 발생하면 커서가 고갈되고 모든 것을 다시 할 수 있습니다. 이 시점에서 독서하면 얻은 것을 던질 것입니다. 테이블을 두 번 읽지 않아도 문제가 발생하지 않도록하려면 모든 행을 직접 읽고 계산해야합니다. DB-Wrapper에 예외가 발생하거나 상태와 같은 수단이 있어야 커서가 아직 고갈되었는지 확인할 수 있습니다.

DB-Wrapper의 권리를 이해하면이 중 하나가 문제가 될 수 있습니다.

+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, 두 개의 필드 이름이 .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

관련 문제