2010-11-29 2 views
1

저는 Android 초심자이며 SQLite와 Android를 실험 해 왔습니다. 쿼리를 가져오고 커서 결과를 사용할 수 있지만 다음 코드를 작동시키지 못했습니다.제발 도와주세요! 안드로이드에 대한 SQLite에 의해 반환 된 커서 내에서 데이터에 액세스 할 때 오류가 발생했습니다.

이 쿼리 문은 queryWhere = "FavoriteObjects". 이것들은 SQLite 데이터베이스 뷰어에서 볼 때 모두 괜찮습니다. 또한 SQLite 데이터베이스 뷰어를 사용하여 쿼리를 실행하면 올바른 결과를 반환합니다.

public long findObject(String[] keys, String[] values,String DATABASE_TABLE_TOQUERY){ 
    try { 
     if(keys.length<0 || keys.length!=values.length) 
      System.exit(-1); 
     String queryWhere = keys[0]+"=\""+values[0]+"\""; 
     for(int i=1;i<keys.length;i++) { 
      queryWhere+=" AND "+keys[i]+"=\""+values[i]+"\""; 
     } 
     Cursor mCursor = mDb.query(true, DATABASE_TABLE_TOQUERY, null, 
        queryWhere, null, null, null, null, null); 
     if (mCursor != null && mCursor.getCount()>0) 
      return Long.parseLong(mCursor.getString(mCursor.getColumnIndex(KEY_ROWID))); 

    }catch (SQLException e) { 
     return -1; 
    } 
    return -1; 
} 

나는 쿼리 문을 실행 한 후 결과를 얻을 때, 커서 mCursor 적어도 하나 개의 행을 가지고,하지만 난 mCursor.getString (X)를 사용하여 해당 행에 액세스 할 때, 그것은 이상한 오류가 발생합니다 :

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1 

mCursor.getColumnIndex (KEY_ROWID)를 확인하면 올바른 0 값을 얻습니다. 누구든지 어떤 제안이 있습니까?

감사합니다! 존

답변

2

시도

mCursor.moveToNext(); 
+0

감사합니다! 그런 일이 왜 일어 났는지 말해 줄 수 있니? getCount()는 커서의 경우에만 1입니다 ... – Jon

+0

각 행에 대해 moveToNext()가 필요합니다. "커서를 첫 번째 행으로 이동 커서가 비어 있으면이 메서드는 false를 반환합니다." (c.moveToNext()) {.. 행 데이터 사용} 중 모든 행을 반복 할 수 있습니다. – Mikpa

+0

moveToFirst()를 먼저 호출 한 다음 moveToNext()를 호출합니다. –

관련 문제