2012-12-03 74 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。非常感谢你的伟大的解释。 –

相关问题