2012-12-03 2 views
2

님, 입력 이름, 숫자에 따라 데이터베이스의 ROWID를 어떻게 반환 할 수 있습니까? 이 코드는 매번 값 0을 반환합니다. 내 기본 키는 KEY_ROWID입니다. 사전 여기다른 필드를 사용하여 sqlite에서 행 ID 가져 오기

//get rowid 
public long getRowId(String name, String number) 
{ 
    // TODO Auto-generated method stub 
    String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_NUMBER}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NUMBER+ "=" +number, null, null, null, null); 

    long rowid = c.getColumnIndex(KEY_ROWID); 
    return rowid; 
} 

의 도움 덕분에 내가 그것을

public void onClick(View arg0) { 
      nameChanged = sqlName.getText().toString(); 
      numChanged = sqlNumber.getText().toString(); 
      GroupDb info = new GroupDb(EditDetails.this); 
      info.open(); 
      long rowid = info.getRowId(name, num); 
      info.updateNameNumber(rowid, nameChanged, numChanged); 
      Toast.makeText(getApplicationContext(), rowid+" "+nameChanged+" "+numChanged, Toast.LENGTH_LONG).show(); 
      ArrayList<Contact> searchResults = info.getView(); 
      MyCustomBaseAdapter mcba = new MyCustomBaseAdapter(EditDetails.this, searchResults); 
      mcba.updateResults(searchResults); 
      Toast.makeText(getApplicationContext(), "Update Successful!", Toast.LENGTH_LONG).show(); 
      info.close(); 
      } 
     }); 

답변

5

fine manual에서 액세스하는 방법입니다 :

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
[...]
반환

Cursor 개체는 첫 번째 항목 앞에 위치합니다.

그래서 먼저 결과 집합에 단계 c이 있고 그것에 대해 moveToFirst를 사용할 수 있습니다

c.moveToFirst(); 

이제 커서가 가리키는 것을 행의 ROWID를 추출해야합니다. 그러나 getColumnIndex은 행의 위치로 열 이름을 매핑입니다 :

지정된 열 이름의 제로로부터 시작되는 인덱스를 돌려줍니다 열이 존재하지 않는 경우.

KEY_ROWID이 SELECT 쿼리의 첫 번째 열이기 때문에 getColumnIndex에서 0이 표시됩니다. 당신이 할 수

long rowid = c.getLong(c.getColumnIndex(KEY_ROWID)); 

당신이 (당신이) 쿼리의 구조를 알고있는 경우 : 당신이 Cursor '에서 long을 추출 할 경우

나는의 설정 결과는 getLong 찾고있는 생각 getColumnIndex 전화를 건너 뛰고 알려진 인덱스를 사용

: 당신이하고있는 모두가 ROWID를 찾는 경우
long rowid = c.getLong(0); 

그리고

, 당신은 단지 KEY_ROWID를 선택할 수 있습니다
String[] columns = new String[]{KEY_ROWID}; 

무시하고있는 데이터베이스에서 데이터를 가져올 필요가 없습니다.

+0

그래서 나는 항상 0을 얻습니다. 당신의 위대한 설명에 대해 대단히 감사합니다. –

관련 문제