2012-12-03 55 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)
[...]
返回

A Cursor對象,位於第一個條目之前。

所以首先你必須一步c到結果集,你可以使用moveToFirst爲:

c.moveToFirst(); 

現在你需要提取從該行光標所指向的ROWID。但getColumnIndex是該行中的映射列名的位置:

返回從零開始的索引爲給定的列名,或-1,如果列不存在。

由於您的KEY_ROWID是您的SELECT查詢中的第一列,因此您從getColumnIndex獲得零。

我認爲你正在尋找getLong,如果你想提取從Cursor「一個long小號結果集:

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

如果你知道你的查詢的結構(你這樣做),你可以跳過getColumnIndex電話而只使用已知的指標:

long rowid = c.getLong(0); 

如果你正在做的是仰視的ROWID,你可以選擇只KEY_ROWID

String[] columns = new String[]{KEY_ROWID}; 

有沒有必要從數據庫中取出你忽略的東西。

+0

所以這就是爲什麼我總是得到0。非常感謝你的偉大的解釋。 –

相關問題