저는 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 값을 얻습니다. 누구든지 어떤 제안이 있습니까?
감사합니다! 존
감사합니다! 그런 일이 왜 일어 났는지 말해 줄 수 있니? getCount()는 커서의 경우에만 1입니다 ... – Jon
각 행에 대해 moveToNext()가 필요합니다. "커서를 첫 번째 행으로 이동 커서가 비어 있으면이 메서드는 false를 반환합니다." (c.moveToNext()) {.. 행 데이터 사용} 중 모든 행을 반복 할 수 있습니다. – Mikpa
moveToFirst()를 먼저 호출 한 다음 moveToNext()를 호출합니다. –